Fix std::pair std::is_copy_assignable behavior
Wed Apr 17 20:23:00 GMT 2013
On 04/17/2013 10:02 PM, Paolo Carlini wrote:
> 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:
>>>> Here is an other proposal to fix
>>> 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?
>> 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 188.8.131.52. 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.
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 ?
More information about the Libstdc++