In an application using C++11 and Boost.Asio, I came to use lambda functions and an std::unique_ptr.
I want to transfer the ownership of this unique_ptr to a lambda.
You can't capture the unique_ptr by value as this class doesn't provide a copy constructor.
It is also silly to capture it by reference, as I do want the transfer of ownership.
I decided to use std::bind to pass this unique_ptr as a last parameter of this lambda function. I use std::move to give an r-value reference to this lambda. Later I will move this r-value into a std::unique_ptr (local to the lambda). I am stuck with some horrible gcc errors, and wonder what I missed in my code.
Here is the code that contains my ugly non-working trick:
void NetworkClient::start()
{
    // Avoid the naggle algorithm on packets.
    ip::tcp::no_delay optionNoDelay(true);
    socket_.set_option(optionNoDelay);
    // Lambda function that receive a packet header.
    std::function<void (const boost::system::error_code& error, std::size_t bytesTransfered)> receiveHeaderHandler =
    [this, &receiveHeaderHandler] (const boost::system::error_code& error, std::size_t bytesTransfered)
    {
        if (error)
        {
            std::cout << LogType::ERROR << "Error while receiving a packet header" << std::endl;
        }
        if (bytesTransfered < 6)
        {
            std::cout << LogType::ERROR << "Invalid packet received: header size < 6" << std::endl;
        }
        std::cout << "Packet received" << std::endl;
        // Allocate memory for the incoming packet body.
        std::unique_ptr<char[]> packetBody(new char[currentHeader_.size()]);
        // Let's receive the packet body according to the header.
        socket_.async_receive(buffer(packetBody.get(), currentHeader_.size()), std::bind
        ([this, &receiveHeaderHandler] (boost::system::error_code const & error, std::size_t bytesTransfered, std::unique_ptr<char[]> && arg)
        {            
            if (error)
            {
                std::cout << LogType::ERROR << "Error while receiving a packet header" << std::endl;
            }
            if (bytesTransfered < currentHeader_.size())
            {
                std::cout << LogType::ERROR << "Invalid packet received: size of packet < size from header" << std::endl;
            }
            std::unique_ptr<char[]> packetBody(arg);     
            socket_.async_receive(buffer(currentHeader_.data(), 6), receiveHeaderHandler);
         }, std::placeholders::_1, std::placeholders::_2, std::move(packetBody)));
    };
    socket_.async_receive(buffer(currentHeader_.data(), 6), receiveHeaderHandler);
}
Here is the trimmed and cleaned buggy part:
        // Allocate memory for the incoming packet body.
        std::unique_ptr<char[]> packetBody(new char[20]);
        // Let's receive the packet body according to the header.
        socket_.async_receive(asio::buffer(packetBody.get(), 20), std::bind(
        [] (boost::system::error_code const & error, std::size_t bytesTransfered, std::unique_ptr<char[]> && arg)
        {
            std::unique_ptr<char[]> packetBody(arg);
        }, std::placeholders::_1, std::placeholders::_2, std::move(packetBody)));
In this code:
- packetBody is the std::unique_ptr i want to transfer
- the async_receive handler must looks like void handler(const boost::system::error_code& error,std::size_t bytes_transferred);
- the design looks ugly but i wanted to try c++11 lambdas in depth
Here is my gcc output:
In file included from /usr/include/boost/asio.hpp:30:0,
                 from server/network/./network-client.hpp:4,
                 from server/network/network-client.cpp:1:
/usr/include/boost/asio/basic_stream_socket.hpp: In instantiation of 'void boost::asio::basic_stream_socket<Protocol, StreamSocketService>::async_receive(const MutableBufferSequence&, ReadHandler&&) [with MutableBufferSequence = boost::asio::mutable_buffers_1; ReadHandler = std::_Bind<oroshi::network::NetworkClient::start()::<lambda(const boost::system::error_code&, std::size_t)>::<lambda(const boost::system::error_code&, std::size_t, std::unique_ptr<char []>&)>(std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char []>)>; Protocol = boost::asio::ip::tcp; StreamSocketService = boost::asio::stream_socket_service<boost::asio::ip::tcp>]':
server/network/network-client.cpp:56:70:   required from here
/usr/include/boost/asio/basic_stream_socket.hpp:518:64: error: use of deleted function 'std::_Bind<_Functor(_Bound_args ...)>::_Bind(const std::_Bind<_Functor(_Bound_args ...)>&) [with _Functor = oroshi::network::NetworkClient::start()::<lambda(const boost::system::error_code&, std::size_t)>::<lambda(const boost::system::error_code&, std::size_t, std::unique_ptr<char []>&)>; _Bound_args = {std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char [], std::default_delete<char []> >}; std::_Bind<_Functor(_Bound_args ...)> = std::_Bind<oroshi::network::NetworkClient::start()::<lambda(const boost::system::error_code&, std::size_t)>::<lambda(const boost::system::error_code&, std::size_t, std::unique_ptr<char []>&)>(std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char []>)>]'
In file included from /usr/include/boost/system/error_code.hpp:23:0,
                 from /usr/include/boost/asio/io_service.hpp:25,
                 from /usr/include/boost/asio/basic_io_object.hpp:19,
                 from /usr/include/boost/asio/basic_socket.hpp:19,
                 from /usr/include/boost/asio/basic_datagram_socket.hpp:20,
                 from /usr/include/boost/asio.hpp:20,
                 from server/network/./network-client.hpp:4,
                 from server/network/network-client.cpp:1:
/usr/include/c++/4.7/functional:1199:7: note: 'std::_Bind<_Functor(_Bound_args ...)>::_Bind(const std::_Bind<_Functor(_Bound_args ...)>&) [with _Functor = oroshi::network::NetworkClient::start()::<lambda(const boost::system::error_code&, std::size_t)>::<lambda(const boost::system::error_code&, std::size_t, std::unique_ptr<char []>&)>; _Bound_args = {std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char [], std::default_delete<char []> >}; std::_Bind<_Functor(_Bound_args ...)> = std::_Bind<oroshi::network::NetworkClient::start()::<lambda(const boost::system::error_code&, std::size_t)>::<lambda(const boost::system::error_code&, std::size_t, std::unique_ptr<char []>&)>(std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char []>)>]' is implicitly deleted because the default definition would be ill-formed:
/usr/include/c++/4.7/functional:1199:7: error: use of deleted function 'constexpr std::tuple< <template-parameter-1-1> >::tuple(const std::tuple< <template-parameter-1-1> >&) [with _Elements = {std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char [], std::default_delete<char []> >}; std::tuple< <template-parameter-1-1> > = std::tuple<std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char [], std::default_delete<char []> > >]'
In file included from /usr/include/c++/4.7/functional:56:0,
                 from /usr/include/boost/system/error_code.hpp:23,
                 from /usr/include/boost/asio/io_service.hpp:25,
                 from /usr/include/boost/asio/basic_io_object.hpp:19,
                 from /usr/include/boost/asio/basic_socket.hpp:19,
                 from /usr/include/boost/asio/basic_datagram_socket.hpp:20,
                 from /usr/include/boost/asio.hpp:20,
                 from server/network/./network-client.hpp:4,
                 from server/network/network-client.cpp:1:
/usr/include/c++/4.7/tuple:393:17: note: 'constexpr std::tuple< <template-parameter-1-1> >::tuple(const std::tuple< <template-parameter-1-1> >&) [with _Elements = {std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char [], std::default_delete<char []> >}; std::tuple< <template-parameter-1-1> > = std::tuple<std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char [], std::default_delete<char []> > >]' is implicitly deleted because the default definition would be ill-formed:
/usr/include/c++/4.7/tuple:393:17: error: use of deleted function 'constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl(const std::_Tuple_impl<_Idx, _Head, _Tail ...>&) [with long unsigned int _Idx = 0ul; _Head = std::_Placeholder<1>; _Tail = {std::_Placeholder<2>, std::unique_ptr<char [], std::default_delete<char []> >}; std::_Tuple_impl<_Idx, _Head, _Tail ...> = std::_Tuple_impl<0ul, std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char [], std::default_delete<char []> > >]'
/usr/include/c++/4.7/tuple:250:17: note: 'constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl(const std::_Tuple_impl<_Idx, _Head, _Tail ...>&) [with long unsigned int _Idx = 0ul; _Head = std::_Placeholder<1>; _Tail = {std::_Placeholder<2>, std::unique_ptr<char [], std::default_delete<char []> >}; std::_Tuple_impl<_Idx, _Head, _Tail ...> = std::_Tuple_impl<0ul, std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char [], std::default_delete<char []> > >]' is implicitly deleted because the default definition would be ill-formed:
/usr/include/c++/4.7/tuple:250:17: error: use of deleted function 'constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl(const std::_Tuple_impl<_Idx, _Head, _Tail ...>&) [with long unsigned int _Idx = 1ul; _Head = std::_Placeholder<2>; _Tail = {std::unique_ptr<char [], std::default_delete<char []> >}; std::_Tuple_impl<_Idx, _Head, _Tail ...> = std::_Tuple_impl<1ul, std::_Placeholder<2>, std::unique_ptr<char [], std::default_delete<char []> > >]'
/usr/include/c++/4.7/tuple:250:17: note: 'constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl(const std::_Tuple_impl<_Idx, _Head, _Tail ...>&) [with long unsigned int _Idx = 1ul; _Head = std::_Placeholder<2>; _Tail = {std::unique_ptr<char [], std::default_delete<char []> >}; std::_Tuple_impl<_Idx, _Head, _Tail ...> = std::_Tuple_impl<1ul, std::_Placeholder<2>, std::unique_ptr<char [], std::default_delete<char []> > >]' is implicitly deleted because the default definition would be ill-formed:
/usr/include/c++/4.7/tuple:250:17: error: use of deleted function 'constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl(const std::_Tuple_impl<_Idx, _Head, _Tail ...>&) [with long unsigned int _Idx = 2ul; _Head = std::unique_ptr<char []>; _Tail = {}; std::_Tuple_impl<_Idx, _Head, _Tail ...> = std::_Tuple_impl<2ul, std::unique_ptr<char [], std::default_delete<char []> > >]'
/usr/include/c++/4.7/tuple:250:17: note: 'constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl(const std::_Tuple_impl<_Idx, _Head, _Tail ...>&) [with long unsigned int _Idx = 2ul; _Head = std::unique_ptr<char []>; _Tail = {}; std::_Tuple_impl<_Idx, _Head, _Tail ...> = std::_Tuple_impl<2ul, std::unique_ptr<char [], std::default_delete<char []> > >]' is implicitly deleted because the default definition would be ill-formed:
/usr/include/c++/4.7/tuple:250:17: error: use of deleted function 'std::_Head_base<2ul, std::unique_ptr<char []>, false>::_Head_base(const std::_Head_base<2ul, std::unique_ptr<char []>, false>&)'
/usr/include/c++/4.7/tuple:122:12: note: 'std::_Head_base<2ul, std::unique_ptr<char []>, false>::_Head_base(const std::_Head_base<2ul, std::unique_ptr<char []>, false>&)' is implicitly deleted because the default definition would be ill-formed:
/usr/include/c++/4.7/tuple:122:12: error: use of deleted function 'std::unique_ptr<_Tp [], _Dp>::unique_ptr(const std::unique_ptr<_Tp [], _Dp>&) [with _Tp = char; _Dp = std::default_delete<char []>; std::unique_ptr<_Tp [], _Dp> = std::unique_ptr<char []>]'
In file included from /usr/include/c++/4.7/memory:86:0,
                 from /usr/include/boost/asio/detail/shared_ptr.hpp:21,
                 from /usr/include/boost/asio/detail/socket_ops.hpp:21,
                 from /usr/include/boost/asio/detail/socket_holder.hpp:20,
                 from /usr/include/boost/asio/detail/reactive_socket_accept_op.hpp:24,
                 from /usr/include/boost/asio/detail/reactive_socket_service.hpp:30,
                 from /usr/include/boost/asio/datagram_socket_service.hpp:26,
                 from /usr/include/boost/asio/basic_datagram_socket.hpp:21,
                 from /usr/include/boost/asio.hpp:20,
                 from server/network/./network-client.hpp:4,
                 from server/network/network-client.cpp:1:
/usr/include/c++/4.7/bits/unique_ptr.h:414:7: error: declared here
In file included from /usr/include/boost/asio/impl/io_service.hpp:18:0,
                 from /usr/include/boost/asio/io_service.hpp:767,
                 from /usr/include/boost/asio/basic_io_object.hpp:19,
                 from /usr/include/boost/asio/basic_socket.hpp:19,
                 from /usr/include/boost/asio/basic_datagram_socket.hpp:20,
                 from /usr/include/boost/asio.hpp:20,
                 from server/network/./network-client.hpp:4,
                 from server/network/network-client.cpp:1:
/usr/include/boost/asio/detail/handler_type_requirements.hpp:83:8: error:   initializing argument 1 of 'char (& boost::asio::detail::two_arg_handler_test(Handler, ...))[2] [with Handler = std::_Bind<oroshi::network::NetworkClient::start()::<lambda(const boost::system::error_code&, std::size_t)>::<lambda(const boost::system::error_code&, std::size_t, std::unique_ptr<char []>&)>(std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char []>)>]'
In file included from /usr/include/boost/asio.hpp:30:0,
                 from server/network/./network-client.hpp:4,
                 from server/network/network-client.cpp:1:
/usr/include/boost/asio/basic_stream_socket.hpp:515:5: error: static assertion failed: ReadHandler type requirements not met
/usr/include/boost/asio/basic_stream_socket.hpp:515:57: error: use of deleted function 'std::_Bind<_Functor(_Bound_args ...)>::_Bind(const std::_Bind<_Functor(_Bound_args ...)>&) [with _Functor = oroshi::network::NetworkClient::start()::<lambda(const boost::system::error_code&, std::size_t)>::<lambda(const boost::system::error_code&, std::size_t, std::unique_ptr<char []>&)>; _Bound_args = {std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char [], std::default_delete<char []> >}; std::_Bind<_Functor(_Bound_args ...)> = std::_Bind<oroshi::network::NetworkClient::start()::<lambda(const boost::system::error_code&, std::size_t)>::<lambda(const boost::system::error_code&, std::size_t, std::unique_ptr<char []>&)>(std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char []>)>]'
In file included from /usr/include/boost/asio/impl/io_service.hpp:18:0,
                 from /usr/include/boost/asio/io_service.hpp:767,
                 from /usr/include/boost/asio/basic_io_object.hpp:19,
                 from /usr/include/boost/asio/basic_socket.hpp:19,
                 from /usr/include/boost/asio/basic_datagram_socket.hpp:20,
                 from /usr/include/boost/asio.hpp:20,
                 from server/network/./network-client.hpp:4,
                 from server/network/network-client.cpp:1:
/usr/include/boost/asio/detail/handler_type_requirements.hpp:95:26: error:   initializing argument 1 of 'T& boost::asio::detail::lvref(T) [with T = std::_Bind<oroshi::network::NetworkClient::start()::<lambda(const boost::system::error_code&, std::size_t)>::<lambda(const boost::system::error_code&, std::size_t, std::unique_ptr<char []>&)>(std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char []>)>]'
In file included from /usr/include/boost/asio.hpp:30:0,
                 from server/network/./network-client.hpp:4,
                 from server/network/network-client.cpp:1:
/usr/include/boost/asio/basic_stream_socket.hpp:515:57: error: use of deleted function 'std::_Bind<_Functor(_Bound_args ...)>::_Bind(const std::_Bind<_Functor(_Bound_args ...)>&) [with _Functor = oroshi::network::NetworkClient::start()::<lambda(const boost::system::error_code&, std::size_t)>::<lambda(const boost::system::error_code&, std::size_t, std::unique_ptr<char []>&)>; _Bound_args = {std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char [], std::default_delete<char []> >}; std::_Bind<_Functor(_Bound_args ...)> = std::_Bind<oroshi::network::NetworkClient::start()::<lambda(const boost::system::error_code&, std::size_t)>::<lambda(const boost::system::error_code&, std::size_t, std::unique_ptr<char []>&)>(std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char []>)>]'
In file included from /usr/include/boost/asio/impl/io_service.hpp:18:0,
                 from /usr/include/boost/asio/io_service.hpp:767,
                 from /usr/include/boost/asio/basic_io_object.hpp:19,
                 from /usr/include/boost/asio/basic_socket.hpp:19,
                 from /usr/include/boost/asio/basic_datagram_socket.hpp:20,
                 from /usr/include/boost/asio.hpp:20,
                 from server/network/./network-client.hpp:4,
                 from server/network/network-client.cpp:1:
/usr/include/boost/asio/detail/handler_type_requirements.hpp:96:32: error:   initializing argument 1 of 'const T& boost::asio::detail::clvref(T) [with T = std::_Bind<oroshi::network::NetworkClient::start()::<lambda(const boost::system::error_code&, std::size_t)>::<lambda(const boost::system::error_code&, std::size_t, std::unique_ptr<char []>&)>(std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char []>)>]'
In file included from /usr/include/boost/asio.hpp:30:0,
                 from server/network/./network-client.hpp:4,
                 from server/network/network-client.cpp:1:
/usr/include/boost/asio/basic_stream_socket.hpp:515:57: error: use of deleted function 'std::_Bind<_Functor(_Bound_args ...)>::_Bind(const std::_Bind<_Functor(_Bound_args ...)>&) [with _Functor = oroshi::network::NetworkClient::start()::<lambda(const boost::system::error_code&, std::size_t)>::<lambda(const boost::system::error_code&, std::size_t, std::unique_ptr<char []>&)>; _Bound_args = {std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char [], std::default_delete<char []> >}; std::_Bind<_Functor(_Bound_args ...)> = std::_Bind<oroshi::network::NetworkClient::start()::<lambda(const boost::system::error_code&, std::size_t)>::<lambda(const boost::system::error_code&, std::size_t, std::unique_ptr<char []>&)>(std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char []>)>]'
In file included from /usr/include/boost/asio/impl/io_service.hpp:18:0,
                 from /usr/include/boost/asio/io_service.hpp:767,
                 from /usr/include/boost/asio/basic_io_object.hpp:19,
                 from /usr/include/boost/asio/basic_socket.hpp:19,
                 from /usr/include/boost/asio/basic_datagram_socket.hpp:20,
                 from /usr/include/boost/asio.hpp:20,
                 from server/network/./network-client.hpp:4,
                 from server/network/network-client.cpp:1:
/usr/include/boost/asio/detail/handler_type_requirements.hpp:97:28: error:   initializing argument 1 of 'char boost::asio::detail::argbyv(T) [with T = std::_Bind<oroshi::network::NetworkClient::start()::<lambda(const boost::system::error_code&, std::size_t)>::<lambda(const boost::system::error_code&, std::size_t, std::unique_ptr<char []>&)>(std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char []>)>]'
In file included from /usr/include/c++/4.7/functional:56:0,
                 from /usr/include/boost/system/error_code.hpp:23,
                 from /usr/include/boost/asio/io_service.hpp:25,
                 from /usr/include/boost/asio/basic_io_object.hpp:19,
                 from /usr/include/boost/asio/basic_socket.hpp:19,
                 from /usr/include/boost/asio/basic_datagram_socket.hpp:20,
                 from /usr/include/boost/asio.hpp:20,
                 from server/network/./network-client.hpp:4,
                 from server/network/network-client.cpp:1:
/usr/include/c++/4.7/tuple: In instantiation of 'constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long unsigned int _Idx = 2ul; _Head = std::unique_ptr<char []>]':
/usr/include/c++/4.7/tuple:241:44:   recursively required from 'constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl(const _Head&, const _Tail& ...) [with long unsigned int _Idx = 1ul; _Head = std::_Placeholder<2>; _Tail = {std::unique_ptr<char [], std::default_delete<char []> >}]'
/usr/include/c++/4.7/tuple:241:44:   required from 'constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl(const _Head&, const _Tail& ...) [with long unsigned int _Idx = 0ul; _Head = std::_Placeholder<1>; _Tail = {std::_Placeholder<2>, std::unique_ptr<char [], std::default_delete<char []> >}]'
/usr/include/c++/4.7/tuple:384:33:   required from 'constexpr std::tuple< <template-parameter-1-1> >::tuple(const _Elements& ...) [with _Elements = {std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char [], std::default_delete<char []> >}]'
/usr/include/c++/4.7/functional:1196:70:   required from 'std::_Bind<_Functor(_Bound_args ...)>::_Bind(_Functor&&, _Args&& ...) [with _Args = {const std::_Placeholder<1>&, const std::_Placeholder<2>&, std::unique_ptr<char [], std::default_delete<char []> >&}; _Functor = oroshi::network::NetworkClient::start()::<lambda(const boost::system::error_code&, std::size_t)>::<lambda(const boost::system::error_code&, std::size_t, std::unique_ptr<char []>&)>; _Bound_args = {std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char [], std::default_delete<char []> >}]'
/usr/include/c++/4.7/functional:1527:42:   required from 'typename std::_Bind_helper<std::__is_socketlike<_Func>::value, _Func, _BoundArgs ...>::type std::bind(_Func&&, _BoundArgs&& ...) [with _Func = oroshi::network::NetworkClient::start()::<lambda(const boost::system::error_code&, std::size_t)>::<lambda(const boost::system::error_code&, std::size_t, std::unique_ptr<char []>&)>; _BoundArgs = {const std::_Placeholder<1>&, const std::_Placeholder<2>&, std::unique_ptr<char [], std::default_delete<char []> >&}; typename std::_Bind_helper<std::__is_socketlike<_Func>::value, _Func, _BoundArgs ...>::type = std::_Bind<oroshi::network::NetworkClient::start()::<lambda(const boost::system::error_code&, std::size_t)>::<lambda(const boost::system::error_code&, std::size_t, std::unique_ptr<char []>&)>(std::_Placeholder<1>, std::_Placeholder<2>, std::unique_ptr<char []>)>]'
server/network/network-client.cpp:56:69:   required from here
/usr/include/c++/4.7/tuple:128:25: error: use of deleted function 'std::unique_ptr<_Tp [], _Dp>::unique_ptr(const std::unique_ptr<_Tp [], _Dp>&) [with _Tp = char; _Dp = std::default_delete<char []>; std::unique_ptr<_Tp [], _Dp> = std::unique_ptr<char []>]'
In file included from /usr/include/c++/4.7/memory:86:0,
                 from /usr/include/boost/asio/detail/shared_ptr.hpp:21,
                 from /usr/include/boost/asio/detail/socket_ops.hpp:21,
                 from /usr/include/boost/asio/detail/socket_holder.hpp:20,
                 from /usr/include/boost/asio/detail/reactive_socket_accept_op.hpp:24,
                 from /usr/include/boost/asio/detail/reactive_socket_service.hpp:30,
                 from /usr/include/boost/asio/datagram_socket_service.hpp:26,
                 from /usr/include/boost/asio/basic_datagram_socket.hpp:21,
                 from /usr/include/boost/asio.hpp:20,
                 from server/network/./network-client.hpp:4,
                 from server/network/network-client.cpp:1:
/usr/include/c++/4.7/bits/unique_ptr.h:414:7: error: declared here
