fork download
  1. #include <iostream>
  2. #include <memory>
  3.  
  4. int main()
  5. {
  6. struct deleter {
  7. void operator(int* p) { delete p; }
  8. };
  9. std::unique_ptr<int, deleter()> p1(new int);
  10. std::unique_ptr<int> p2(new int);
  11. std::cout << "p1 size == " << sizeof(p1) << std::endl;
  12. std::cout << "p2 size == " << sizeof(p2) << std::endl;
  13. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp: In function 'int main()':
prog.cpp:7:18: error: expected type-specifier before '(' token
In file included from /usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/functional:56:0,
                 from /usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/memory:82,
                 from prog.cpp:2:
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/tuple: At global scope:
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/tuple: In instantiation of 'std::_Head_base<1u, main()::deleter(), false>':
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/tuple:140:5:   instantiated from 'std::_Tuple_impl<1u, main()::deleter()>'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/tuple:140:5:   instantiated from 'std::_Tuple_impl<0u, int*, main()::deleter()>'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/tuple:308:5:   instantiated from 'std::tuple<int*, main()::deleter()>'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/bits/unique_ptr.h:211:20:   instantiated from 'std::unique_ptr<int, main()::deleter()>'
prog.cpp:9:37:   instantiated from here
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/tuple:106:13: error: field 'std::_Head_base<1u, main()::deleter(), false>::_M_head_impl' invalidly declared function type
In file included from /usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/memory:84:0,
                 from prog.cpp:2:
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/bits/unique_ptr.h: In constructor 'std::unique_ptr<_Tp, _Tp_Deleter>::unique_ptr(_Tp*) [with _Tp = int, _Tp_Deleter = main()::deleter(), _Tp* = int*]':
prog.cpp:9:45:   instantiated from here
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/bits/unique_ptr.h:99:33: error: conversion from 'int' to non-scalar type 'main()::deleter()' requested
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/bits/unique_ptr.h: In member function 'void std::unique_ptr<_Tp, _Tp_Deleter>::reset(_Tp*) [with _Tp = int, _Tp_Deleter = main()::deleter(), _Tp* = int*]':
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/bits/unique_ptr.h:124:23:   instantiated from 'std::unique_ptr<_Tp, _Tp_Deleter>::~unique_ptr() [with _Tp = int, _Tp_Deleter = main()::deleter()]'
prog.cpp:9:45:   instantiated from here
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/bits/unique_ptr.h:196:4: error: too many arguments to function
In file included from /usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/functional:56:0,
                 from /usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/memory:82,
                 from prog.cpp:2:
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/tuple: In member function '_Head& std::_Head_base<_Idx, _Head, false>::_M_head() [with unsigned int _Idx = 1u, _Head = main()::deleter()]':
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/tuple:144:65:   instantiated from '_Head& std::_Tuple_impl<_Idx, _Head, _Tail ...>::_M_head() [with unsigned int _Idx = 1u, _Head = main()::deleter(), _Tail = {}]'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/tuple:443:26:   instantiated from 'typename std::__add_ref<_Head>::type std::__get_helper(std::_Tuple_impl<_Idx, _Head, _Tail ...>&) [with unsigned int __i = 1u, _Head = main()::deleter(), _Tail = {}, typename std::__add_ref<_Head>::type = main()::deleter (&)()]'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/tuple:457:35:   instantiated from 'typename std::__add_ref<typename std::tuple_element<__i, std::tuple<_Elements ...> >::type>::type std::get(std::tuple<_Elements ...>&) [with unsigned int __i = 1u, _Elements = {int*, main()::deleter()}, typename std::__add_ref<typename std::tuple_element<__i, std::tuple<_Elements ...> >::type>::type = main()::deleter (&)()]'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/bits/unique_ptr.h:172:32:   instantiated from 'deleter_type& std::unique_ptr<_Tp, _Tp_Deleter>::get_deleter() [with _Tp = int, _Tp_Deleter = main()::deleter(), deleter_type = main()::deleter()]'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/bits/unique_ptr.h:196:4:   instantiated from 'void std::unique_ptr<_Tp, _Tp_Deleter>::reset(_Tp*) [with _Tp = int, _Tp_Deleter = main()::deleter(), _Tp* = int*]'
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/bits/unique_ptr.h:124:23:   instantiated from 'std::unique_ptr<_Tp, _Tp_Deleter>::~unique_ptr() [with _Tp = int, _Tp_Deleter = main()::deleter()]'
prog.cpp:9:45:   instantiated from here
/usr/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/tuple:96:45: error: invalid initialization of reference of type 'main()::deleter (&)()' from expression of type 'main()::deleter (*)()'
stdout
Standard output is empty