This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Failing test when run as C++11


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

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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]