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