fork(1) download
  1. #include <iostream>
  2. #include <memory>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. class A
  7. {
  8. public:
  9. A() = default;
  10.  
  11. };
  12.  
  13.  
  14. class B
  15. {
  16.  
  17. public:
  18.  
  19. void AddAs(const vector<unique_ptr<A>>& vv)
  20. {
  21.  
  22. vec.insert(vec.end(),
  23. std::make_move_iterator(vv.begin()),
  24. std::make_move_iterator(vv.end())
  25. );
  26. }
  27.  
  28. vector<unique_ptr<A>> vec;
  29. };
  30.  
  31.  
  32. int main() {
  33.  
  34. vector<unique_ptr<A>> v;
  35. for(int i=0; i<10; ++i)
  36. {
  37. v.push_back(make_unique<A>());
  38. }
  39. B b;
  40. b.AddAs(v);
  41.  
  42. return 0;
  43. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
In file included from /usr/include/c++/6/bits/char_traits.h:39:0,
                 from /usr/include/c++/6/ios:40,
                 from /usr/include/c++/6/ostream:38,
                 from /usr/include/c++/6/iostream:39,
                 from prog.cpp:1:
/usr/include/c++/6/bits/stl_algobase.h: In instantiation of ‘static _OI std::__copy_move<true, false, std::random_access_iterator_tag>::__copy_m(_II, _II, _OI) [with _II = const std::unique_ptr<A>*; _OI = std::unique_ptr<A>*]’:
/usr/include/c++/6/bits/stl_algobase.h:386:44:   required from ‘_OI std::__copy_move_a(_II, _II, _OI) [with bool _IsMove = true; _II = const std::unique_ptr<A>*; _OI = std::unique_ptr<A>*]’
/usr/include/c++/6/bits/stl_algobase.h:422:45:   required from ‘_OI std::__copy_move_a2(_II, _II, _OI) [with bool _IsMove = true; _II = __gnu_cxx::__normal_iterator<const std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > >; _OI = __gnu_cxx::__normal_iterator<std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > >]’
/usr/include/c++/6/bits/stl_algobase.h:455:8:   required from ‘_OI std::copy(_II, _II, _OI) [with _II = std::move_iterator<__gnu_cxx::__normal_iterator<const std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > > >; _OI = __gnu_cxx::__normal_iterator<std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > >]’
/usr/include/c++/6/bits/vector.tcc:637:16:   required from ‘void std::vector<_Tp, _Alloc>::_M_range_insert(std::vector<_Tp, _Alloc>::iterator, _ForwardIterator, _ForwardIterator, std::forward_iterator_tag) [with _ForwardIterator = std::move_iterator<__gnu_cxx::__normal_iterator<const std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > > >; _Tp = std::unique_ptr<A>; _Alloc = std::allocator<std::unique_ptr<A> >; std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > >; typename std::_Vector_base<_Tp, _Alloc>::pointer = std::unique_ptr<A>*]’
/usr/include/c++/6/bits/stl_vector.h:1375:4:   required from ‘void std::vector<_Tp, _Alloc>::_M_insert_dispatch(std::vector<_Tp, _Alloc>::iterator, _InputIterator, _InputIterator, std::__false_type) [with _InputIterator = std::move_iterator<__gnu_cxx::__normal_iterator<const std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > > >; _Tp = std::unique_ptr<A>; _Alloc = std::allocator<std::unique_ptr<A> >; std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > >; typename std::_Vector_base<_Tp, _Alloc>::pointer = std::unique_ptr<A>*]’
/usr/include/c++/6/bits/stl_vector.h:1100:4:   required from ‘std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::insert(std::vector<_Tp, _Alloc>::const_iterator, _InputIterator, _InputIterator) [with _InputIterator = std::move_iterator<__gnu_cxx::__normal_iterator<const std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > > >; <template-parameter-2-2> = void; _Tp = std::unique_ptr<A>; _Alloc = std::allocator<std::unique_ptr<A> >; std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > >; typename std::_Vector_base<_Tp, _Alloc>::pointer = std::unique_ptr<A>*; std::vector<_Tp, _Alloc>::const_iterator = __gnu_cxx::__normal_iterator<const std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > >; typename __gnu_cxx::__alloc_traits<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type>::const_pointer = const std::unique_ptr<A>*]’
prog.cpp:25:4:   required from here
/usr/include/c++/6/bits/stl_algobase.h:343:18: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>& std::unique_ptr<_Tp, _Dp>::operator=(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = A; _Dp = std::default_delete<A>]’
        *__result = std::move(*__first);
        ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6/memory:81:0,
                 from prog.cpp:2:
/usr/include/c++/6/bits/unique_ptr.h:360:19: note: declared here
       unique_ptr& operator=(const unique_ptr&) = delete;
                   ^~~~~~~~
In file included from /usr/include/c++/6/memory:64:0,
                 from prog.cpp:2:
/usr/include/c++/6/bits/stl_construct.h: In instantiation of ‘void std::_Construct(_T1*, _Args&& ...) [with _T1 = std::unique_ptr<A>; _Args = {const std::unique_ptr<A, std::default_delete<A> >}]’:
/usr/include/c++/6/bits/stl_uninitialized.h:75:18:   required from ‘static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = std::move_iterator<__gnu_cxx::__normal_iterator<const std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > > >; _ForwardIterator = std::unique_ptr<A>*; bool _TrivialValueTypes = false]’
/usr/include/c++/6/bits/stl_uninitialized.h:126:15:   required from ‘_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = std::move_iterator<__gnu_cxx::__normal_iterator<const std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > > >; _ForwardIterator = std::unique_ptr<A>*]’
/usr/include/c++/6/bits/stl_uninitialized.h:281:37:   required from ‘_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, std::allocator<_Tp>&) [with _InputIterator = std::move_iterator<__gnu_cxx::__normal_iterator<const std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > > >; _ForwardIterator = std::unique_ptr<A>*; _Tp = std::unique_ptr<A>]’
/usr/include/c++/6/bits/vector.tcc:643:34:   required from ‘void std::vector<_Tp, _Alloc>::_M_range_insert(std::vector<_Tp, _Alloc>::iterator, _ForwardIterator, _ForwardIterator, std::forward_iterator_tag) [with _ForwardIterator = std::move_iterator<__gnu_cxx::__normal_iterator<const std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > > >; _Tp = std::unique_ptr<A>; _Alloc = std::allocator<std::unique_ptr<A> >; std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > >; typename std::_Vector_base<_Tp, _Alloc>::pointer = std::unique_ptr<A>*]’
/usr/include/c++/6/bits/stl_vector.h:1375:4:   required from ‘void std::vector<_Tp, _Alloc>::_M_insert_dispatch(std::vector<_Tp, _Alloc>::iterator, _InputIterator, _InputIterator, std::__false_type) [with _InputIterator = std::move_iterator<__gnu_cxx::__normal_iterator<const std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > > >; _Tp = std::unique_ptr<A>; _Alloc = std::allocator<std::unique_ptr<A> >; std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > >; typename std::_Vector_base<_Tp, _Alloc>::pointer = std::unique_ptr<A>*]’
/usr/include/c++/6/bits/stl_vector.h:1100:4:   required from ‘std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::insert(std::vector<_Tp, _Alloc>::const_iterator, _InputIterator, _InputIterator) [with _InputIterator = std::move_iterator<__gnu_cxx::__normal_iterator<const std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > > >; <template-parameter-2-2> = void; _Tp = std::unique_ptr<A>; _Alloc = std::allocator<std::unique_ptr<A> >; std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > >; typename std::_Vector_base<_Tp, _Alloc>::pointer = std::unique_ptr<A>*; std::vector<_Tp, _Alloc>::const_iterator = __gnu_cxx::__normal_iterator<const std::unique_ptr<A>*, std::vector<std::unique_ptr<A> > >; typename __gnu_cxx::__alloc_traits<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type>::const_pointer = const std::unique_ptr<A>*]’
prog.cpp:25:4:   required from here
/usr/include/c++/6/bits/stl_construct.h:75:7: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = A; _Dp = std::default_delete<A>]’
     { ::new(static_cast<void*>(__p)) _T1(std::forward<_Args>(__args)...); }
       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/6/memory:81:0,
                 from prog.cpp:2:
/usr/include/c++/6/bits/unique_ptr.h:359:7: note: declared here
       unique_ptr(const unique_ptr&) = delete;
       ^~~~~~~~~~
stdout
Standard output is empty