On 04/17/2013 10:02 PM, Paolo Carlini wrote:
Hi,

On 4/17/13 8:43 PM, François Dumont wrote:
On 04/17/2013 09:18 PM, Paolo Carlini wrote:
On 4/17/13 8:10 PM, François Dumont wrote:
Hi

Here is an other proposal to fix std::is_copy_assignable<std::pair<>>.
Sorry, I'm still missing something very, very basic: which behavior is conforming, the current one or what we would get instead? If the former, is there a DR arguing for the latter?

Paolo.

The behavior I am targeting is std::is_copy_asignable<std::pair<const int, int>> to be std::false_type for instance. I have added test for many other use cases. More generally I need that when std::is_copy_assignable<T> is std::true_type then writing a = b, with a and b being T, does compile.

Otherwise this patch just make std::pair match the Standard requirements like at 20.3.2.17. Do you want me to add a bug report in Bugzilla first ?
I'm not talking about GCC's Bugzilla, I meant an ISO DR: if we don't have a DR and preferably a vague support of LWG people, I think we should not change the behavior of our std::is_copy_assignable only because it helps our implementation of other facilities.

Paolo.

    I really don't get it. Is current behavior really Standard compliant ?

I don't think so and would like to fix it. The Standard says that pair& operator=(const pair&) requires that both is_copy_assignable<first_type> and is_copy_assignable<second_type> to be true. With std::pair<const int, int>, is_copy_assignable<const int> is false and then the operator is ill formed. It is if you try to call it but if you check is_copy_assignable<pair<const int, int>> it says true. Do you see it as a correct behavior ? Do you really think that it requires an ISO DR ?

François

Reply via email to