fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <type_traits>
  5. using namespace std;
  6.  
  7. struct Foo
  8. {
  9. Foo(int bar) : bar(bar) {}
  10. Foo(const Foo& rhs) { cout << "Copy constructor" << endl; bar = rhs.bar; }
  11. private:
  12. Foo(Foo&& rhs) { bar = rhs.bar; cout << "Move constructor " << bar << endl; }
  13. public:
  14. Foo& operator=(const Foo& rhs) { cout << "copy operator=" << endl; bar = rhs.bar; }
  15. //Foo& operator=(Foo&& rhs) { bar = rhs.bar; cout << "move operator= " << bar << endl; }
  16.  
  17. //Foo(Foo&&) = delete;
  18. Foo& operator=(Foo&&) = delete;
  19.  
  20. //Foo(const Foo&) = delete;
  21. //Foo& operator=(const Foo&) = delete;
  22.  
  23. int bar;
  24. };
  25.  
  26. int main()
  27. {
  28. vector<Foo> v;// = { move(Foo(5)), move(Foo(-1)), move(Foo(49)), move(Foo(29)) };
  29. Foo f(5);
  30. Foo f2(-53);
  31. v.push_back(f);
  32. v.push_back(f2);
  33.  
  34. cout << boolalpha << is_move_constructible<Foo>::value << endl;
  35.  
  36. cout << "SORTING: " << endl;
  37. sort(begin(v), end(v), [](const Foo& a, const Foo& b) { return a.bar < b.bar; });
  38. for (const auto& i : v)
  39. cout << i.bar << " ";
  40.  
  41. return 0;
  42. }
Compilation error #stdin compilation error #stdout 0s 3276KB
stdin
Standard input is empty
compilation info
/usr/include/c++/4.9/bits/stl_algo.h: In instantiation of 'void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(const Foo&, const Foo&)> >]':
/usr/include/c++/4.9/bits/stl_algo.h:1884:70:   required from 'void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(const Foo&, const Foo&)> >]'
/usr/include/c++/4.9/bits/stl_algo.h:1970:55:   required from 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(const Foo&, const Foo&)> >]'
/usr/include/c++/4.9/bits/stl_algo.h:4716:78:   required from 'void std::sort(_RAIter, _RAIter, _Compare) [with _RAIter = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Compare = main()::<lambda(const Foo&, const Foo&)>]'
prog.cpp:37:81:   required from here
prog.cpp:12:2: error: 'Foo::Foo(Foo&&)' is private
  Foo(Foo&& rhs) { bar = rhs.bar; cout << "Move constructor " << bar << endl; }
  ^
In file included from /usr/include/c++/4.9/bits/stl_pair.h:59:0,
                 from /usr/include/c++/4.9/bits/stl_algobase.h:64,
                 from /usr/include/c++/4.9/bits/char_traits.h:39,
                 from /usr/include/c++/4.9/ios:40,
                 from /usr/include/c++/4.9/ostream:38,
                 from /usr/include/c++/4.9/iostream:39,
                 from prog.cpp:1:
/usr/include/c++/4.9/bits/stl_algo.h:1849:11: error: within this context
   __val = _GLIBCXX_MOVE(*__i);
           ^
In file included from /usr/include/c++/4.9/algorithm:62:0,
                 from prog.cpp:3:
/usr/include/c++/4.9/bits/stl_algo.h:1851:17: error: use of deleted function 'Foo& Foo::operator=(Foo&&)'
        *__first = _GLIBCXX_MOVE(__val);
                 ^
prog.cpp:18:7: note: declared here
  Foo& operator=(Foo&&) = delete;
       ^
/usr/include/c++/4.9/bits/stl_heap.h: In instantiation of 'void std::__make_heap(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(const Foo&, const Foo&)> >]':
/usr/include/c++/4.9/bits/stl_algo.h:1673:49:   required from 'void std::__heap_select(_RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(const Foo&, const Foo&)> >]'
/usr/include/c++/4.9/bits/stl_algo.h:1932:59:   required from 'void std::__partial_sort(_RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(const Foo&, const Foo&)> >]'
/usr/include/c++/4.9/bits/stl_algo.h:1947:59:   required from 'void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Size = int; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(const Foo&, const Foo&)> >]'
/usr/include/c++/4.9/bits/stl_algo.h:1969:11:   required from 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(const Foo&, const Foo&)> >]'
/usr/include/c++/4.9/bits/stl_algo.h:4716:78:   required from 'void std::sort(_RAIter, _RAIter, _Compare) [with _RAIter = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Compare = main()::<lambda(const Foo&, const Foo&)>]'
prog.cpp:37:81:   required from here
prog.cpp:12:2: error: 'Foo::Foo(Foo&&)' is private
  Foo(Foo&& rhs) { bar = rhs.bar; cout << "Move constructor " << bar << endl; }
  ^
In file included from /usr/include/c++/4.9/bits/stl_pair.h:59:0,
                 from /usr/include/c++/4.9/bits/stl_algobase.h:64,
                 from /usr/include/c++/4.9/bits/char_traits.h:39,
                 from /usr/include/c++/4.9/ios:40,
                 from /usr/include/c++/4.9/ostream:38,
                 from /usr/include/c++/4.9/iostream:39,
                 from prog.cpp:1:
/usr/include/c++/4.9/bits/stl_heap.h:332:25: error: within this context
    _ValueType __value = _GLIBCXX_MOVE(*(__first + __parent));
                         ^
prog.cpp:12:2: error: 'Foo::Foo(Foo&&)' is private
  Foo(Foo&& rhs) { bar = rhs.bar; cout << "Move constructor " << bar << endl; }
  ^
In file included from /usr/include/c++/4.9/bits/stl_algo.h:61:0,
                 from /usr/include/c++/4.9/algorithm:62,
                 from prog.cpp:3:
/usr/include/c++/4.9/bits/stl_heap.h:334:15: error: within this context
         __comp);
               ^
/usr/include/c++/4.9/bits/stl_heap.h:207:5: error:   initializing argument 4 of 'void std::__adjust_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Distance = int; _Tp = Foo; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(const Foo&, const Foo&)> >]'
     __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
     ^
/usr/include/c++/4.9/bits/stl_heap.h: In instantiation of 'void std::__pop_heap(_RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(const Foo&, const Foo&)> >]':
/usr/include/c++/4.9/bits/stl_algo.h:1676:50:   required from 'void std::__heap_select(_RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(const Foo&, const Foo&)> >]'
/usr/include/c++/4.9/bits/stl_algo.h:1932:59:   required from 'void std::__partial_sort(_RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(const Foo&, const Foo&)> >]'
/usr/include/c++/4.9/bits/stl_algo.h:1947:59:   required from 'void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Size = int; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(const Foo&, const Foo&)> >]'
/usr/include/c++/4.9/bits/stl_algo.h:1969:11:   required from 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(const Foo&, const Foo&)> >]'
/usr/include/c++/4.9/bits/stl_algo.h:4716:78:   required from 'void std::sort(_RAIter, _RAIter, _Compare) [with _RAIter = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Compare = main()::<lambda(const Foo&, const Foo&)>]'
prog.cpp:37:81:   required from here
prog.cpp:12:2: error: 'Foo::Foo(Foo&&)' is private
  Foo(Foo&& rhs) { bar = rhs.bar; cout << "Move constructor " << bar << endl; }
  ^
In file included from /usr/include/c++/4.9/bits/stl_pair.h:59:0,
                 from /usr/include/c++/4.9/bits/stl_algobase.h:64,
                 from /usr/include/c++/4.9/bits/char_traits.h:39,
                 from /usr/include/c++/4.9/ios:40,
                 from /usr/include/c++/4.9/ostream:38,
                 from /usr/include/c++/4.9/iostream:39,
                 from prog.cpp:1:
/usr/include/c++/4.9/bits/stl_heap.h:243:28: error: within this context
       _ValueType __value = _GLIBCXX_MOVE(*__result);
                            ^
In file included from /usr/include/c++/4.9/bits/stl_algo.h:61:0,
                 from /usr/include/c++/4.9/algorithm:62,
                 from prog.cpp:3:
/usr/include/c++/4.9/bits/stl_heap.h:244:17: error: use of deleted function 'Foo& Foo::operator=(Foo&&)'
       *__result = _GLIBCXX_MOVE(*__first);
                 ^
prog.cpp:18:7: note: declared here
  Foo& operator=(Foo&&) = delete;
       ^
prog.cpp:12:2: error: 'Foo::Foo(Foo&&)' is private
  Foo(Foo&& rhs) { bar = rhs.bar; cout << "Move constructor " << bar << endl; }
  ^
In file included from /usr/include/c++/4.9/bits/stl_algo.h:61:0,
                 from /usr/include/c++/4.9/algorithm:62,
                 from prog.cpp:3:
/usr/include/c++/4.9/bits/stl_heap.h:247:35: error: within this context
     _GLIBCXX_MOVE(__value), __comp);
                                   ^
/usr/include/c++/4.9/bits/stl_heap.h:207:5: error:   initializing argument 4 of 'void std::__adjust_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Distance = int; _Tp = Foo; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(const Foo&, const Foo&)> >]'
     __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
     ^
/usr/include/c++/4.9/bits/move.h: In instantiation of 'void std::swap(_Tp&, _Tp&) [with _Tp = Foo]':
/usr/include/c++/4.9/bits/stl_algobase.h:148:22:   required from 'void std::iter_swap(_ForwardIterator1, _ForwardIterator2) [with _ForwardIterator1 = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _ForwardIterator2 = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >]'
/usr/include/c++/4.9/bits/stl_algo.h:84:34:   required from 'void std::__move_median_to_first(_Iterator, _Iterator, _Iterator, _Iterator, _Compare) [with _Iterator = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(const Foo&, const Foo&)> >]'
/usr/include/c++/4.9/bits/stl_algo.h:1921:13:   required from '_RandomAccessIterator std::__unguarded_partition_pivot(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(const Foo&, const Foo&)> >]'
/usr/include/c++/4.9/bits/stl_algo.h:1952:62:   required from 'void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Size = int; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(const Foo&, const Foo&)> >]'
/usr/include/c++/4.9/bits/stl_algo.h:1969:11:   required from 'void std::__sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<main()::<lambda(const Foo&, const Foo&)> >]'
/usr/include/c++/4.9/bits/stl_algo.h:4716:78:   required from 'void std::sort(_RAIter, _RAIter, _Compare) [with _RAIter = __gnu_cxx::__normal_iterator<Foo*, std::vector<Foo> >; _Compare = main()::<lambda(const Foo&, const Foo&)>]'
prog.cpp:37:81:   required from here
prog.cpp:12:2: error: 'Foo::Foo(Foo&&)' is private
  Foo(Foo&& rhs) { bar = rhs.bar; cout << "Move constructor " << bar << endl; }
  ^
In file included from /usr/include/c++/4.9/bits/stl_pair.h:59:0,
                 from /usr/include/c++/4.9/bits/stl_algobase.h:64,
                 from /usr/include/c++/4.9/bits/char_traits.h:39,
                 from /usr/include/c++/4.9/ios:40,
                 from /usr/include/c++/4.9/ostream:38,
                 from /usr/include/c++/4.9/iostream:39,
                 from prog.cpp:1:
/usr/include/c++/4.9/bits/move.h:175:19: error: within this context
       _Tp __tmp = _GLIBCXX_MOVE(__a);
                   ^
/usr/include/c++/4.9/bits/move.h:176:11: error: use of deleted function 'Foo& Foo::operator=(Foo&&)'
       __a = _GLIBCXX_MOVE(__b);
           ^
prog.cpp:18:7: note: declared here
  Foo& operator=(Foo&&) = delete;
       ^
In file included from /usr/include/c++/4.9/bits/stl_pair.h:59:0,
                 from /usr/include/c++/4.9/bits/stl_algobase.h:64,
                 from /usr/include/c++/4.9/bits/char_traits.h:39,
                 from /usr/include/c++/4.9/ios:40,
                 from /usr/include/c++/4.9/ostream:38,
                 from /usr/include/c++/4.9/iostream:39,
                 from prog.cpp:1:
/usr/include/c++/4.9/bits/move.h:177:11: error: use of deleted function 'Foo& Foo::operator=(Foo&&)'
       __b = _GLIBCXX_MOVE(__tmp);
           ^
prog.cpp:18:7: note: declared here
  Foo& operator=(Foo&&) = delete;
       ^
stdout
Standard output is empty