boost asio ssl流套接字编译问题 在C++应用程序中使用Boo1.4.2ASIO并获得Linux编译器警告,我不懂。

boost asio ssl流套接字编译问题 在C++应用程序中使用Boo1.4.2ASIO并获得Linux编译器警告,我不懂。,c++,g++,boost-asio,C++,G++,Boost Asio,还在吗? 我正在开发的应用程序需要一个“套接字”,可能是ssl套接字,也可能是常规tcp套接字,所以我们隐藏了细节 在接受ssl套接字类或ssl套接字类的模板“套接字”类后面 tcp套接字类作为模板参数-下面是ssl类代码。 应用程序运行正常,未启用任何优化;问题是当我在LinuxG++4.4.1下编译时 如果在-02或更高级别启用优化,则启用-fstrict别名标志。 编译将导致严格的别名警告,其内容如下: “警告:取消引用类型双关指针将破坏严格的别名规则” 无论在哪里,我都会取消引用(例如,

还在吗?
我正在开发的应用程序需要一个“套接字”,可能是ssl套接字,也可能是常规tcp套接字,所以我们隐藏了细节 在接受ssl套接字类或ssl套接字类的模板“套接字”类后面 tcp套接字类作为模板参数-下面是ssl类代码。
应用程序运行正常,未启用任何优化;问题是当我在LinuxG++4.4.1下编译时 如果在-02或更高级别启用优化,则启用-fstrict别名标志。 编译将导致严格的别名警告,其内容如下: “警告:取消引用类型双关指针将破坏严格的别名规则” 无论在哪里,我都会取消引用(例如,取消引用->握手)

我想知道为什么会发出此警告,它是否表明存在设计问题

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;
};
class socket\u ssl\u cli
{
公众:
typedef ba::ssl::流套接字_类型;
socket_ssl_cli(ba::io_服务和io_svc、SocketConfig和SocketCFG)
:_io_svc(io_svc)
,_ctxt(_io_svc,ba::ssl::context::tlsv1)
,_psock(0)
{
试一试{
//唯一的ssl上下文
//硬编码用于测试,但从配置中获取这些值
_ctxt.set_options(ba::ssl::context::default_解决方案)
ba::ssl::context::verify\u none);
_psock=新插座类型(_io_svc,_ctxt);
}捕获(bs::系统错误和x){
抛出std::runtime_错误(x.code().message());
}
}
~socket\u ssl\u cli()
{ 
如果(_psock){
错误代码ec;
关闭插座(ec);
删除\u psock;
}
}
套接字类型和原始套接字(){return*\u psock;}
无效设置(bs::错误代码和ec)
{
_psock->handshake(ba::ssl::stream_base::client,ec);
}
无效关闭\u套接字(bs::错误\u代码和ec)
{ 
//关闭ssl,然后关闭套接字,然后关闭套接字
_psock->停机(ec);
_psock->lower_layer().shutdown(ba::socket_base::shutdown_both,ec);
_psock->lower_layer().关闭(ec);
}
私人:
ba::io_服务和svc;
ba::ssl::context\u ctxt;
插座类型*\u psock;
};
打开-02时所有的编译输出都会导致-fstrict别名

../../../../third-party/boost/1.42.0/boost/function/function_base.hpp:321:警告:取消引用类型双关指针将破坏严格的别名规则 ../../../../third-party/boost/1.42.0/boost/function/function_base.hpp:325:警告:取消引用类型双关指针将破坏严格的别名规则 ../../../../third-party/boost/1.42.0/boost/function/function\u base.hpp:在静态成员函数“静态无效boost::detail::function::functor\u manager\u common::manager\u small”(常量boost::detail::function::function\u buffer&,boost::detail::function::function\u buffer&,boost::detail::function::function::functor\u manager\u operation\u type)[使用Functor=boost::_-bi::bind\u-t>>>,boost::_-bi::list1>>*>>>]: ../../../../third-party/boost/1.42.0/boost/function/function\u base.hpp:360:从“static void boost::detail::functor\u manager::manager::manager”(常量boost::detail::function::function\u buffer&,boost::detail::function::function\u buffer&,boost::detail::function::function::functor\u manager\u operation\u type,mpl\u[使用Functor=boost::_-bi::bind\u-t>>,boost::_-bi::list1>>*>>] ../../../../../third-party/boost/1.42.0/boost/function/function\u base.hpp:406:从“static void boost::detail::function::functor\u manager::manager”实例化(const boost::detail::function_buffer&,boost::detail::function::function_buffer&,boost::detail::function_obj_tag)[with functor=boost::_bi::bind_t>>,boost:_bi::list1>>*>] ../../../../third-party/boost/1.42.0/boost/function/function\u base.hpp:434:从“static void boost::detail::functor\u manager::manager::manage”(const boost::detail::function\u buffer&,boost::detail::function::function\u buffer&,boost::detail::function::functor\u manager\u operation\u type)实例化[使用Functor=boost::_-bi::bind\u-t>>,boost::_-bi::list1>>*>>] ../../../../third-party/boost/1.42.0/boost/function/function_template.hpp:913:从“void boost::function0::assign_to(Functor)”实例化[使用Functor=boost::_bi::bind_t>>>,boost:_bi::list1>*>>,R=int]' ../../../../third-party/boost/1.42.0/boost/function/function_template.hpp:722:从“boost::function0::function0(Functor,typename boost::enable_if_c::type)[使用Functor=boost::_bi::bind_t>>>,boost:_bi::list1>*>>,R=int]' ../../../../third-party/boost/1.42.0/boost/function/function_template.hpp:1064:从“boost::function::function(Functor,typename boost::enable_if_c::type)[带Functor=boost:_bi::bind_t>>,boost:_bi::list1>*>>,R=int]' ../../../../third-party/boost/1.42.0/boost/function/function_template.hpp:1105:从“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\u operation.hpp:134:从'boost::asio::ssl::detail::openssl\u operation::openssl\u operation'(boost::asio::ssl::detail::ssl::ssl::net\u buffer&,ssl*,BIO*)[with Stream=boost::asio::basic\u Stream\u socket>] ../../../../third-party/boost/1.42.0/boost/asio/ssl/detail/openssl\u stream\u service.hpp:510:从“boost::system::error\u code boost::asio::ssl::detail::openssl\u stream\u service::impl\u struct*&,stream&,boost::asio::ssl::stream\u base::handshake\u type,boost::system::error\u code&”)实例化[with Stream=boost::asio::basic_