Failing test when run as C++11

Jonathan Wakely jwakely@redhat.com
Fri May 9 12:11:00 GMT 2014


On 09/05/14 12:20 +0100, Jonathan Wakely wrote:
>On 09/05/14 13:15 +0200, Daniel Krügler wrote:
>>2014-05-09 12:53 GMT+02:00 Jonathan Wakely <jwakely@redhat.com>:
>>>20_util/specialized_algorithms/uninitialized_copy/808590.cc fails if
>>>run in C++11 mode because is_nothrow_move_constructible<c> is false,
>>>which means vector::resize() copies the elements using non-const
>>>lvalue arguments, which selects the template constructor.
>>>
>>>(In C++03 it copies from *const* lvalue arguments, selecting the copy
>>>constructor.)
>>>
>>>We can either fix it by adding throw() to the copy constructor, or by
>>>adding a move cosntructor (with a comment explaining why):
>>>
>>>#if __cplusplus >= 201103L
>>>  c(c&&) = default;
>>>#endif
>>>
>>>I can't decide which I prefer, does anyone else have a preference?
>>
>>Do you know whether the test case was added to validate a bug fix and
>>if so, which one? I would like to ensure that the change still
>>reflects the original intention for adding it.
>
>See https://bugzilla.redhat.com/show_bug.cgi?id=808590

Sorry, I didn't realise that PR needs authorisation.
It's basically the same code as the 808590.cc testcase saying it works
with GCC 4.5+ but not GCC 4.4, so you're not missing anything
interesting.

>That was filed against Red Hat's GCC 4.4 and at the time the upstream
>GCC already passed the test. Benjamin added the test to catch any
>regressions. Arguably, the C++11 behaviour (copying from non-const
>lvalue instead of const lvalue) can be considered a regression, but I
>think it's the correct behaviour.
>



More information about the Libstdc++ mailing list