Using boost 1.4.2 asio in a c++ app and getting linux compiler warnings i don't grok.
still here?
The app i'm working on needs a "socket" that might be an ssl socket or a regular tcp socket so we hide specifics
behind a template "socket" class that takes either an ssl socket class or
tcp socket class as template parameter - below is the ssl class code.
The app runs properly without any optimization turned on; the issue is when i compile under linux g++ 4.4.1 
and turn on optimization at -02 or higher, the -fstrict-aliasing flag is turned on.
Compiling results in strict aliasing warnings along the lines of:
"warning: dereferencing type-punned pointer will break strict-aliasing rules"
everywhere i dereference _psock  (eg _psock->handshake)
I'd like to know why this warning is being issued, and does it indicate a design problem...
class socket_ssl_cli
{
public:
    typedef ba::ssl::stream<ba::ip::tcp::socket> socket_type;
    socket_ssl_cli(ba::io_service& io_svc, SocketConfig & sockcfg)
        : _io_svc(io_svc)
        , _ctxt(_io_svc, ba::ssl::context::tlsv1)
        , _psock(0)
    {
        try {
            // the one and only ssl context
            // hardcoded for test, but get these values from config
            _ctxt.set_options(ba::ssl::context::default_workarounds | 
                                ba::ssl::context::verify_none);
            _psock = new socket_type(_io_svc, _ctxt);
        } catch (bs::system_error & x) {
            throw std::runtime_error(x.code().message());
        }
    }
    ~socket_ssl_cli() 
    { 
        if (_psock) {
            bs::error_code ec;
            close_socket(ec); 
            delete _psock; 
        }
    }
    socket_type & raw_socket() { return *_psock; }
    void setup(bs::error_code & ec)
    {
        _psock->handshake(ba::ssl::stream_base::client, ec);
    }
    void close_socket(bs::error_code & ec) 
    { 
        // shut down ssl, then shutdown socket, then close socket
        _psock->shutdown(ec);
        _psock->lowest_layer().shutdown(ba::socket_base::shutdown_both, ec);
        _psock->lowest_layer().close(ec);
    }
private:
    ba::io_service & _io_svc;
    ba::ssl::context _ctxt;
    socket_type * _psock;
};
all the painful compile output with -02 turned on, which results in -fstrict-aliasing
../../../../third-party/boost/1.42.0/boost/function/function_base.hpp:321: warning: dereferencing type-punned pointer will break strict-aliasing rules ../../../../third-party/boost/1.42.0/boost/function/function_base.hpp:325: warning: dereferencing type-punned pointer will break strict-aliasing rules ../../../../third-party/boost/1.42.0/boost/function/function_base.hpp: In static member function ‘static void boost::detail::function::functor_manager_common::manage_small(const boost::detail::function::function_buffer&, boost::detail::function::function_buffer&, boost::detail::function::functor_manager_operation_type) [with Functor = boost::_bi::bind_t > > >, boost::_bi::list1 > >*> > >]’: ../../../../third-party/boost/1.42.0/boost/function/function_base.hpp:360: instantiated from ‘static void boost::detail::function::functor_manager::manager(const boost::detail::function::function_buffer&, boost::detail::function::function_buffer&, boost::detail::function::functor_manager_operation_type, mpl_::true_) [with Functor = boost::_bi::bind_t > > >, boost::_bi::list1 > >*> > >]’ ../../../../third-party/boost/1.42.0/boost/function/function_base.hpp:406: instantiated from ‘static void boost::detail::function::functor_manager::manager(const boost::detail::function::function_buffer&, boost::detail::function::function_buffer&, boost::detail::function::functor_manager_operation_type, boost::detail::function::function_obj_tag) [with Functor = boost::_bi::bind_t > > >, boost::_bi::list1 > >*> > >]’ ../../../../third-party/boost/1.42.0/boost/function/function_base.hpp:434: instantiated from ‘static void boost::detail::function::functor_manager::manage(const boost::detail::function::function_buffer&, boost::detail::function::function_buffer&, boost::detail::function::functor_manager_operation_type) [with Functor = boost::_bi::bind_t > > >, boost::_bi::list1 > >*> > >]’ ../../../../third-party/boost/1.42.0/boost/function/function_template.hpp:913: instantiated from ‘void boost::function0::assign_to(Functor) [with Functor = boost::_bi::bind_t > > >, boost::_bi::list1 > >*> > >, R = int]’ ../../../../third-party/boost/1.42.0/boost/function/function_template.hpp:722: instantiated from ‘boost::function0::function0(Functor, typename boost::enable_if_c::type) [with Functor = boost::_bi::bind_t > > >, boost::_bi::list1 > >*> > >, R = int]’ ../../../../third-party/boost/1.42.0/boost/function/function_template.hpp:1064: instantiated from ‘boost::function::function(Functor, typename boost::enable_if_c::type) [with Functor = boost::_bi::bind_t > > >, boost::_bi::list1 > >*> > >, R = int]’ ../../../../third-party/boost/1.42.0/boost/function/function_template.hpp:1105: instantiated from ‘typename boost::enable_if_c&>::type boost::function::operator=(Functor) [with Functor = boost::_bi::bind_t > > >, boost::_bi::list1 > >*> > >, R = int]’ ../../../../third-party/boost/1.42.0/boost/asio/ssl/detail/openssl_operation.hpp:134: instantiated from ‘boost::asio::ssl::detail::openssl_operation::openssl_operation(boost::asio::ssl::detail::ssl_primitive_func, Stream&, boost::asio::ssl::detail::net_buffer&, SSL*, BIO*) [with Stream = boost::asio::basic_stream_socket >]’ ../../../../third-party/boost/1.42.0/boost/asio/ssl/detail/openssl_stream_service.hpp:510: instantiated from ‘boost::system::error_code boost::asio::ssl::detail::openssl_stream_service::handshake(boost::asio::ssl::detail::openssl_stream_service::impl_struct*&, Stream&, boost::asio::ssl::stream_base::handshake_type, boost::system::error_code&) [with Stream = boost::asio::basic_stream_socket >]’ ../../../../third-party/boost/1.42.0/boost/asio/ssl/stream_service.hpp:100: instantiated from ‘boost::system::error_code boost::asio::ssl::stream_service::handshake(boost::asio::ssl::detail::openssl_stream_service::impl_struct*&, Stream&, boost::asio::ssl::stream_base::handshake_type, boost::system::error_code&) [with Stream = boost::asio::basic_stream_socket >]’ ../../../../third-party/boost/1.42.0/boost/asio/ssl/stream.hpp:207: instantiated from ‘boost::system::error_code boost::asio::ssl::stream::handshake(boost::asio::ssl::stream_base::handshake_type, boost::system::error_code&) [with Stream = boost::asio::basic_stream_socket >, Service = boost::asio::ssl::stream_service]’ ../sockets/socket_ssl_cli.h:45: instantiated from here