http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50093

             Bug #: 50093
           Summary: [4.6 Regression] STL containers of
                    non-default-constructible classes fail under
                    -std=c++0x
    Classification: Unclassified
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: ande...@mit.edu


This code builds with ‘g++-4.5’, ‘g++-4.5 -std=c++0x’, and ‘g++-4.6’, but fails
with ‘g++-4.6 -std=c++0x’:

#include <vector>
class Foo {
    Foo(int) {}
};
template class std::vector<Foo>;
int main() {return 0;}

$ g++-4.6 -std=c++0x foo.cc
In file included from /usr/include/c++/4.6/vector:63:0,
                 from foo.cc:1:
/usr/include/c++/4.6/bits/stl_construct.h: In function ‘void
std::_Construct(_T1*, _Args&& ...) [with _T1 = Foo, _Args = {}]’:
/usr/include/c++/4.6/bits/stl_uninitialized.h:481:3:   instantiated from
‘static void
std::__uninitialized_default_n_1<_TrivialValueType>::__uninit_default_n(_ForwardIterator,
_Size) [with _ForwardIterator = Foo*, _Size = long unsigned int, bool
_TrivialValueType = false]’
/usr/include/c++/4.6/bits/stl_uninitialized.h:529:7:   instantiated from ‘void
std::__uninitialized_default_n(_ForwardIterator, _Size) [with _ForwardIterator
= Foo*, _Size = long unsigned int]’
/usr/include/c++/4.6/bits/stl_uninitialized.h:589:7:   instantiated from ‘void
std::__uninitialized_default_n_a(_ForwardIterator, _Size, std::allocator<_Tp>&)
[with _ForwardIterator = Foo*, _Size = long unsigned int, _Tp = Foo]’
/usr/include/c++/4.6/bits/stl_vector.h:1134:2:   instantiated from ‘void
std::vector<_Tp, _Alloc>::_M_default_initialize(std::vector<_Tp,
_Alloc>::size_type) [with _Tp = Foo, _Alloc = std::allocator<Foo>,
std::vector<_Tp, _Alloc>::size_type = long unsigned int]’
foo.cc:5:21:   instantiated from here
/usr/include/c++/4.6/bits/stl_construct.h:76:7: error: no matching function for
call to ‘Foo::Foo()’
/usr/include/c++/4.6/bits/stl_construct.h:76:7: note: candidates are:
foo.cc:3:5: note: Foo::Foo(int)
foo.cc:3:5: note:   candidate expects 1 argument, 0 provided
foo.cc:2:7: note: constexpr Foo::Foo(const Foo&)
foo.cc:2:7: note:   candidate expects 1 argument, 0 provided
foo.cc:2:7: note: constexpr Foo::Foo(Foo&&)
foo.cc:2:7: note:   candidate expects 1 argument, 0 provided

Reply via email to