C++ 如何使用共享的\u ptr或推荐另一种方法(独特的\u ptr)

C++ 如何使用共享的\u ptr或推荐另一种方法(独特的\u ptr),c++,C++,UPD:所以解决方案的要点是:如果存在复制构造函数,它将阻止移动构造函数被std::move调用。问题已解决。 我试图根据讲师的要求编写一个“线程安全堆栈”: 它应该存储类型本身 对于基元类型,它应该通过复制接收/返回(在c中通常如此) 对于类类型,它不应该在接收/返回时调用冗余复制构造函数。使用shared_ptr实现此目的 我不能让第三个工作 更具体地说:我不知道如何向这样设计的类传递共享的ptr。而且,我几乎可以肯定我写的类本身在语法上是错误的 \ifndef安全队列 #定义安全队列 #包

UPD:所以解决方案的要点是:如果存在复制构造函数,它将阻止移动构造函数被
std::move
调用。问题已解决。
我试图根据讲师的要求编写一个“线程安全堆栈”:

  • 它应该存储类型本身
  • 对于基元类型,它应该通过复制接收/返回(在c中通常如此)
  • 对于类类型,它不应该在接收/返回时调用冗余复制构造函数。使用
    shared_ptr
    实现此目的
  • 我不能让第三个工作

    更具体地说:我不知道如何向这样设计的类传递共享的ptr。而且,我几乎可以肯定我写的类本身在语法上是错误的

    \ifndef安全队列
    #定义安全队列
    #包括
    #包括
    #包括
    #包括
    #包括
    #包括
    模板
    类安全队列{
    公众:
    安全队列(){
    printf(“构造函数”\n);
    }
    ~SafeQueue(){
    printf(“析构函数”);
    }
    无效推送(T数据){
    std::唯一的锁(m);
    _队列推送(数据);
    printf(“推送%d\n”,数据);
    _cv.通知_one();
    }
    无效推送(标准::共享的ptr数据){
    std::唯一的锁(m);
    _queue.push(*数据);
    _cv.通知_one();
    }
    bool pop_上衣(T&outEl){
    std::唯一的锁(m);
    而(1){
    布尔a;
    如果(a=this->cv.wait_for(lock,std::chrono::毫秒(1000),
    [this]()->bool{return!(this->queue.empty();}){
    printf(“\n\n//等待返回的%d\n”,a);
    如果(!(_queue.empty())){
    outEl=_queue.front();
    _queue.pop();
    返回true;
    }否则{
    继续;
    }
    }否则{
    printf(“\n\n//等待返回的%d\n”,a);
    printf(“队列为空\n”);
    返回false;
    }
    }
    }
    std::共享\u ptr pop\u top(){
    std::唯一的锁(m);
    而(1){
    布尔a;
    如果(a=this->cv.wait_for(lock,std::chrono::毫秒(1000),
    [this]()->bool{return!(this->queue.empty();}){
    printf(“\n\n//等待返回的%d\n”,a);
    如果(!(_queue.empty())){
    std::shared_ptr cur=std::make_shared(_queue.front());
    _queue.pop();
    返回电流;
    }否则{
    继续;
    }
    }否则{
    printf(“\n\n//等待返回的%d\n”,a);
    printf(“队列为空\n”);
    返回空ptr;
    }
    }
    }
    私人:
    std::queue\u queue;
    std::条件变量cv;
    std::mutex\m;
    };
    #恩迪夫
    
    主要内容:

    所以共享ptr似乎试图调用复制构造函数

    如果我取消对所有内容的注释,我会得到全部内容:

    In file included from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/mutex:42:0,
                     from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/condition_variable:39,
                     from /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/safeQueue.h:9,
                     from /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:2:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/functional: In instantiation of ‘struct std::_Bind_simple<void (*(SafeQueue<myclass>*, myclass))(SafeQueue<myclass>*, myclass&)>’:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/thread:137:47:   required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void (&)(SafeQueue<myclass>*, myclass&); _Args = {SafeQueue<myclass>*, myclass}]’
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:116:86:   required from here
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/functional:1665:61: error: no type named ‘type’ in ‘class std::result_of<void (*(SafeQueue<myclass>*, myclass))(SafeQueue<myclass>*, myclass&)>’
           typedef typename result_of<_Callable(_Args...)>::type result_type;
                                                                 ^
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/functional:1695:9: error: no type named ‘type’ in ‘class std::result_of<void (*(SafeQueue<myclass>*, myclass))(SafeQueue<myclass>*, myclass&)>’
             _M_invoke(_Index_tuple<_Indices...>)
             ^
    In file included from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/mutex:38:0,
                     from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/condition_variable:39,
                     from /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/safeQueue.h:9,
                     from /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:2:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple: In instantiation of ‘struct std::_Head_base<2ul, myclass, false>’:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:231:12:   recursively required from ‘struct std::_Tuple_impl<1ul, SafeQueue<myclass>*, myclass>’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:231:12:   required from ‘struct std::_Tuple_impl<0ul, void (*)(SafeQueue<myclass>*, myclass&), SafeQueue<myclass>*, myclass>’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:390:11:   required from ‘class std::tuple<void (*)(SafeQueue<myclass>*, myclass&), SafeQueue<myclass>*, myclass>’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/functional:1703:39:   required from ‘struct std::_Bind_simple<void (*(SafeQueue<myclass>*, myclass))(SafeQueue<myclass>*, myclass&)>’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/thread:137:47:   required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void (&)(SafeQueue<myclass>*, myclass&); _Args = {SafeQueue<myclass>*, myclass}]’
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:116:86:   required from here
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:137:17: error: ‘constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 2ul; _Head = myclass]’ declared to take const reference, but implicit declaration would take non-const
           constexpr _Head_base(const _Head_base&) = default;
                     ^
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple: In instantiation of ‘constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(_UHead&&) [with _UHead = myclass; long unsigned int _Idx = 2ul; _Head = myclass]’:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:273:42:   required from ‘constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl(std::_Tuple_impl<_Idx, _Head, _Tail ...>&&) [with long unsigned int _Idx = 2ul; _Head = myclass; _Tail = {}]’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/type_traits:900:43:   required by substitution of ‘template<class _Tp, class _Arg, class> static std::true_type std::__do_is_direct_constructible_impl::__test(int) [with _Tp = std::_Tuple_impl<2ul, myclass>; _Arg = std::_Tuple_impl<2ul, myclass>&&; <template-parameter-1-3> = <missing>]’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/type_traits:912:43:   required from ‘struct std::__is_direct_constructible_impl<std::_Tuple_impl<2ul, myclass>, std::_Tuple_impl<2ul, myclass>&&>’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/type_traits:134:12:   required from ‘struct std::__and_<std::is_destructible<std::_Tuple_impl<2ul, myclass> >, std::__is_direct_constructible_impl<std::_Tuple_impl<2ul, myclass>, std::_Tuple_impl<2ul, myclass>&&> >’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/type_traits:916:12:   required from ‘struct std::__is_direct_constructible_new_safe<std::_Tuple_impl<2ul, myclass>, std::_Tuple_impl<2ul, myclass>&&>’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/type_traits:994:12:   [ skipping 21 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/type_traits:1175:12:   required from ‘struct std::is_nothrow_move_constructible<std::_Tuple_impl<1ul, SafeQueue<myclass>*, myclass> >’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/type_traits:134:12:   required from ‘struct std::__and_<std::is_nothrow_move_constructible<void (*)(SafeQueue<myclass>*, myclass&)>, std::is_nothrow_move_constructible<std::_Tuple_impl<1ul, SafeQueue<myclass>*, myclass> > >’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:269:7:   required from ‘constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl(std::_Tuple_impl<_Idx, _Head, _Tail ...>&&) [with long unsigned int _Idx = 0ul; _Head = void (*)(SafeQueue<myclass>*, myclass&); _Tail = {SafeQueue<myclass>*, myclass}]’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/functional:1727:41:   required from ‘typename std::_Bind_simple_helper<_Func, _BoundArgs>::__type std::__bind_simple(_Callable&&, _Args&& ...) [with _Callable = void (&)(SafeQueue<myclass>*, myclass&); _Args = {SafeQueue<myclass>*, myclass}; typename std::_Bind_simple_helper<_Func, _BoundArgs>::__type = std::_Bind_simple<void (*(SafeQueue<myclass>*, myclass))(SafeQueue<myclass>*, myclass&)>]’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/thread:137:47:   required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void (&)(SafeQueue<myclass>*, myclass&); _Args = {SafeQueue<myclass>*, myclass}]’
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:116:86:   required from here
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:142:42: error: no matching function for call to ‘myclass::myclass(myclass)’
      : _M_head_impl(std::forward<_UHead>(__h)) { }
                                              ^
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:142:42: note: candidates are:
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:32:5: note: myclass::myclass(int)
         myclass(int val):val(val){
         ^
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:32:5: note:   no known conversion for argument 1 from ‘myclass’ to ‘int’
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:29:5: note: myclass::myclass(myclass&)
         myclass(myclass &obj){
         ^
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:29:5: note:   no known conversion for argument 1 from ‘myclass’ to ‘myclass&’
    In file included from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/mutex:38:0,
                     from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/condition_variable:39,
                     from /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/safeQueue.h:9,
                     from /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:2:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple: In instantiation of ‘constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long unsigned int _Idx = 2ul; _Head = myclass]’:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:257:44:   recursively required from ‘constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl(const _Head&, const _Tail& ...) [with long unsigned int _Idx = 1ul; _Head = SafeQueue<myclass>*; _Tail = {myclass}]’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:257:44:   required from ‘constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl(const _Head&, const _Tail& ...) [with long unsigned int _Idx = 0ul; _Head = void (*)(SafeQueue<myclass>*, myclass&); _Tail = {SafeQueue<myclass>*, myclass}]’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:400:33:   required from ‘constexpr std::tuple< <template-parameter-1-1> >::tuple(const _Elements& ...) [with _Elements = {void (*)(SafeQueue<myclass>*, myclass&), SafeQueue<myclass>*, myclass}]’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/functional:1678:74:   required from ‘std::_Bind_simple<_Callable(_Args ...)>::_Bind_simple(_Callable&&, _Args2&& ...) [with _Args2 = {SafeQueue<myclass>*, myclass}; <template-parameter-2-2> = void; _Callable = void (*)(SafeQueue<myclass>*, myclass&); _Args = {SafeQueue<myclass>*, myclass}]’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/functional:1727:41:   required from ‘typename std::_Bind_simple_helper<_Func, _BoundArgs>::__type std::__bind_simple(_Callable&&, _Args&& ...) [with _Callable = void (&)(SafeQueue<myclass>*, myclass&); _Args = {SafeQueue<myclass>*, myclass}; typename std::_Bind_simple_helper<_Func, _BoundArgs>::__type = std::_Bind_simple<void (*(SafeQueue<myclass>*, myclass))(SafeQueue<myclass>*, myclass&)>]’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/thread:137:47:   required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void (&)(SafeQueue<myclass>*, myclass&); _Args = {SafeQueue<myclass>*, myclass}]’
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:116:86:   required from here
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:135:25: error: no matching function for call to ‘myclass::myclass(const myclass&)’
           : _M_head_impl(__h) { }
                             ^
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:135:25: note: candidates are:
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:32:5: note: myclass::myclass(int)
         myclass(int val):val(val){
         ^
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:32:5: note:   no known conversion for argument 1 from ‘const myclass’ to ‘int’
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:29:5: note: myclass::myclass(myclass&)
         myclass(myclass &obj){
         ^
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:29:5: note:   no known conversion for argument 1 from ‘const myclass’ to ‘myclass&’
    In file included from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/x86_64-redhat-linux/bits/c++allocator.h:33:0,
                     from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/bits/allocator.h:46,
                     from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/string:41,
                     from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/bits/locale_classes.h:40,
                     from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/bits/ios_base.h:41,
                     from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/ios:42,
                     from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/ostream:38,
                     from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/iostream:39,
                     from /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:1:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/ext/new_allocator.h: In instantiation of ‘void __gnu_cxx::new_allocator<_Tp>::construct(_Up*, _Args&& ...) [with _Up = myclass; _Args = {const myclass&}; _Tp = myclass]’:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/bits/stl_deque.h:1403:6:   required from ‘void std::deque<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = myclass; _Alloc = std::allocator<myclass>; std::deque<_Tp, _Alloc>::value_type = myclass]’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/bits/stl_queue.h:216:9:   required from ‘void std::queue<_Tp, _Sequence>::push(const value_type&) [with _Tp = myclass; _Sequence = std::deque<myclass, std::allocator<myclass> >; std::queue<_Tp, _Sequence>::value_type = myclass]’
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/safeQueue.h:37:9:   required from ‘void SafeQueue<T>::push(std::shared_ptr<_Tp1>) [with T = myclass]’
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:69:43:   required from here
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/ext/new_allocator.h:120:4: error: no matching function for call to ‘myclass::myclass(const myclass&)’
      { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
        ^
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/ext/new_allocator.h:120:4: note: candidates are:
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:32:5: note: myclass::myclass(int)
         myclass(int val):val(val){
         ^
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:32:5: note:   no known conversion for argument 1 from ‘const myclass’ to ‘int’
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:29:5: note: myclass::myclass(myclass&)
         myclass(myclass &obj){
         ^
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:29:5: note:   no known conversion for argument 1 from ‘const myclass’ to ‘myclass&’
    
    在/opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/mutex:42:0中包含的文件中,
    从/opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/condition_变量:39,
    从/gpfs/home/ichernovalov/Sharamet/threads1256/5safequeue/safeQueue.h:9,
    来自/gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:2:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/functional:在“struct std::_Bind_simple”的实例化中:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/thread:137:47:必须来自“std::thread::thread(_Callable&&,_Args&&&…[带_Callable=void(&)(SafeQueue*,myclass&);_Args={SafeQueue*,myclass}]
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:116:86:此处为必填项
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/functional:1665:61:错误:在'class std::result_'
    typedef typename result_of::type result_type;
    ^
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/函数:1695:9:错误:在“class std::result_of”中没有名为“type”的类型
    _M_invoke(_Index_tuple)
    ^
    在/opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/mutex:38:0中包含的文件中,
    从/opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/condition_变量:39,
    从/gpfs/home/ichernovalov/Sharamet/threads1256/5safequeue/safeQueue.h:9,
    来自/gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:2:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:在“struct std::_Head_base”的实例化中:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:231:12:从“struct std::_tuple\u impl”递归需要
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/元组:231:12:必须来自“struct std:_tuple\u impl”
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:390:11:必须来自“class std::tuple”
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/functional:1703:39:struct std:_Bind_simple中的必填项
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/thread:137:47:必须来自“std::thread::thread(_Callable&&,_Args&&&…[带_Callable=void(&)(SafeQueue*,myclass&);_Args={SafeQueue*,myclass}]
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:116:86:此处为必填项
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:137:17:错误:“constexpr std::_Head_base::_Head_base(const std::_Head_base&)[长无符号int_Idx=2ul;_Head=myclass]”声明采用常量引用,但隐式声明采用非常量引用
    constexpr\u Head\u base(const\u Head\u base&)=默认值;
    ^
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:在'
    
    error: no matching function for call to ‘myclass::myclass(const myclass&)’
    
    In file included from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/mutex:42:0,
                     from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/condition_variable:39,
                     from /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/safeQueue.h:9,
                     from /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:2:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/functional: In instantiation of ‘struct std::_Bind_simple<void (*(SafeQueue<myclass>*, myclass))(SafeQueue<myclass>*, myclass&)>’:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/thread:137:47:   required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void (&)(SafeQueue<myclass>*, myclass&); _Args = {SafeQueue<myclass>*, myclass}]’
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:116:86:   required from here
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/functional:1665:61: error: no type named ‘type’ in ‘class std::result_of<void (*(SafeQueue<myclass>*, myclass))(SafeQueue<myclass>*, myclass&)>’
           typedef typename result_of<_Callable(_Args...)>::type result_type;
                                                                 ^
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/functional:1695:9: error: no type named ‘type’ in ‘class std::result_of<void (*(SafeQueue<myclass>*, myclass))(SafeQueue<myclass>*, myclass&)>’
             _M_invoke(_Index_tuple<_Indices...>)
             ^
    In file included from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/mutex:38:0,
                     from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/condition_variable:39,
                     from /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/safeQueue.h:9,
                     from /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:2:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple: In instantiation of ‘struct std::_Head_base<2ul, myclass, false>’:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:231:12:   recursively required from ‘struct std::_Tuple_impl<1ul, SafeQueue<myclass>*, myclass>’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:231:12:   required from ‘struct std::_Tuple_impl<0ul, void (*)(SafeQueue<myclass>*, myclass&), SafeQueue<myclass>*, myclass>’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:390:11:   required from ‘class std::tuple<void (*)(SafeQueue<myclass>*, myclass&), SafeQueue<myclass>*, myclass>’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/functional:1703:39:   required from ‘struct std::_Bind_simple<void (*(SafeQueue<myclass>*, myclass))(SafeQueue<myclass>*, myclass&)>’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/thread:137:47:   required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void (&)(SafeQueue<myclass>*, myclass&); _Args = {SafeQueue<myclass>*, myclass}]’
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:116:86:   required from here
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:137:17: error: ‘constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 2ul; _Head = myclass]’ declared to take const reference, but implicit declaration would take non-const
           constexpr _Head_base(const _Head_base&) = default;
                     ^
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple: In instantiation of ‘constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(_UHead&&) [with _UHead = myclass; long unsigned int _Idx = 2ul; _Head = myclass]’:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:273:42:   required from ‘constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl(std::_Tuple_impl<_Idx, _Head, _Tail ...>&&) [with long unsigned int _Idx = 2ul; _Head = myclass; _Tail = {}]’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/type_traits:900:43:   required by substitution of ‘template<class _Tp, class _Arg, class> static std::true_type std::__do_is_direct_constructible_impl::__test(int) [with _Tp = std::_Tuple_impl<2ul, myclass>; _Arg = std::_Tuple_impl<2ul, myclass>&&; <template-parameter-1-3> = <missing>]’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/type_traits:912:43:   required from ‘struct std::__is_direct_constructible_impl<std::_Tuple_impl<2ul, myclass>, std::_Tuple_impl<2ul, myclass>&&>’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/type_traits:134:12:   required from ‘struct std::__and_<std::is_destructible<std::_Tuple_impl<2ul, myclass> >, std::__is_direct_constructible_impl<std::_Tuple_impl<2ul, myclass>, std::_Tuple_impl<2ul, myclass>&&> >’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/type_traits:916:12:   required from ‘struct std::__is_direct_constructible_new_safe<std::_Tuple_impl<2ul, myclass>, std::_Tuple_impl<2ul, myclass>&&>’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/type_traits:994:12:   [ skipping 21 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/type_traits:1175:12:   required from ‘struct std::is_nothrow_move_constructible<std::_Tuple_impl<1ul, SafeQueue<myclass>*, myclass> >’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/type_traits:134:12:   required from ‘struct std::__and_<std::is_nothrow_move_constructible<void (*)(SafeQueue<myclass>*, myclass&)>, std::is_nothrow_move_constructible<std::_Tuple_impl<1ul, SafeQueue<myclass>*, myclass> > >’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:269:7:   required from ‘constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl(std::_Tuple_impl<_Idx, _Head, _Tail ...>&&) [with long unsigned int _Idx = 0ul; _Head = void (*)(SafeQueue<myclass>*, myclass&); _Tail = {SafeQueue<myclass>*, myclass}]’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/functional:1727:41:   required from ‘typename std::_Bind_simple_helper<_Func, _BoundArgs>::__type std::__bind_simple(_Callable&&, _Args&& ...) [with _Callable = void (&)(SafeQueue<myclass>*, myclass&); _Args = {SafeQueue<myclass>*, myclass}; typename std::_Bind_simple_helper<_Func, _BoundArgs>::__type = std::_Bind_simple<void (*(SafeQueue<myclass>*, myclass))(SafeQueue<myclass>*, myclass&)>]’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/thread:137:47:   required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void (&)(SafeQueue<myclass>*, myclass&); _Args = {SafeQueue<myclass>*, myclass}]’
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:116:86:   required from here
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:142:42: error: no matching function for call to ‘myclass::myclass(myclass)’
      : _M_head_impl(std::forward<_UHead>(__h)) { }
                                              ^
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:142:42: note: candidates are:
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:32:5: note: myclass::myclass(int)
         myclass(int val):val(val){
         ^
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:32:5: note:   no known conversion for argument 1 from ‘myclass’ to ‘int’
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:29:5: note: myclass::myclass(myclass&)
         myclass(myclass &obj){
         ^
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:29:5: note:   no known conversion for argument 1 from ‘myclass’ to ‘myclass&’
    In file included from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/mutex:38:0,
                     from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/condition_variable:39,
                     from /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/safeQueue.h:9,
                     from /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:2:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple: In instantiation of ‘constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long unsigned int _Idx = 2ul; _Head = myclass]’:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:257:44:   recursively required from ‘constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl(const _Head&, const _Tail& ...) [with long unsigned int _Idx = 1ul; _Head = SafeQueue<myclass>*; _Tail = {myclass}]’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:257:44:   required from ‘constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl(const _Head&, const _Tail& ...) [with long unsigned int _Idx = 0ul; _Head = void (*)(SafeQueue<myclass>*, myclass&); _Tail = {SafeQueue<myclass>*, myclass}]’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:400:33:   required from ‘constexpr std::tuple< <template-parameter-1-1> >::tuple(const _Elements& ...) [with _Elements = {void (*)(SafeQueue<myclass>*, myclass&), SafeQueue<myclass>*, myclass}]’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/functional:1678:74:   required from ‘std::_Bind_simple<_Callable(_Args ...)>::_Bind_simple(_Callable&&, _Args2&& ...) [with _Args2 = {SafeQueue<myclass>*, myclass}; <template-parameter-2-2> = void; _Callable = void (*)(SafeQueue<myclass>*, myclass&); _Args = {SafeQueue<myclass>*, myclass}]’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/functional:1727:41:   required from ‘typename std::_Bind_simple_helper<_Func, _BoundArgs>::__type std::__bind_simple(_Callable&&, _Args&& ...) [with _Callable = void (&)(SafeQueue<myclass>*, myclass&); _Args = {SafeQueue<myclass>*, myclass}; typename std::_Bind_simple_helper<_Func, _BoundArgs>::__type = std::_Bind_simple<void (*(SafeQueue<myclass>*, myclass))(SafeQueue<myclass>*, myclass&)>]’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/thread:137:47:   required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void (&)(SafeQueue<myclass>*, myclass&); _Args = {SafeQueue<myclass>*, myclass}]’
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:116:86:   required from here
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:135:25: error: no matching function for call to ‘myclass::myclass(const myclass&)’
           : _M_head_impl(__h) { }
                             ^
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/tuple:135:25: note: candidates are:
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:32:5: note: myclass::myclass(int)
         myclass(int val):val(val){
         ^
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:32:5: note:   no known conversion for argument 1 from ‘const myclass’ to ‘int’
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:29:5: note: myclass::myclass(myclass&)
         myclass(myclass &obj){
         ^
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:29:5: note:   no known conversion for argument 1 from ‘const myclass’ to ‘myclass&’
    In file included from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/x86_64-redhat-linux/bits/c++allocator.h:33:0,
                     from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/bits/allocator.h:46,
                     from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/string:41,
                     from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/bits/locale_classes.h:40,
                     from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/bits/ios_base.h:41,
                     from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/ios:42,
                     from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/ostream:38,
                     from /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/iostream:39,
                     from /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:1:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/ext/new_allocator.h: In instantiation of ‘void __gnu_cxx::new_allocator<_Tp>::construct(_Up*, _Args&& ...) [with _Up = myclass; _Args = {const myclass&}; _Tp = myclass]’:
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/bits/stl_deque.h:1403:6:   required from ‘void std::deque<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = myclass; _Alloc = std::allocator<myclass>; std::deque<_Tp, _Alloc>::value_type = myclass]’
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/bits/stl_queue.h:216:9:   required from ‘void std::queue<_Tp, _Sequence>::push(const value_type&) [with _Tp = myclass; _Sequence = std::deque<myclass, std::allocator<myclass> >; std::queue<_Tp, _Sequence>::value_type = myclass]’
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/safeQueue.h:37:9:   required from ‘void SafeQueue<T>::push(std::shared_ptr<_Tp1>) [with T = myclass]’
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:69:43:   required from here
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/ext/new_allocator.h:120:4: error: no matching function for call to ‘myclass::myclass(const myclass&)’
      { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
        ^
    /opt/rh/devtoolset-3/root/usr/include/c++/4.9.2/ext/new_allocator.h:120:4: note: candidates are:
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:32:5: note: myclass::myclass(int)
         myclass(int val):val(val){
         ^
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:32:5: note:   no known conversion for argument 1 from ‘const myclass’ to ‘int’
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:29:5: note: myclass::myclass(myclass&)
         myclass(myclass &obj){
         ^
    /gpfs/home/ichernovalov/Sharamet/Threads 1 2 5 6/5 safeQueue/main.cpp:29:5: note:   no known conversion for argument 1 from ‘const myclass’ to ‘myclass&’