使用 Boost 1.43 和 GCC 4.4.3,以下代码
boost::bind(&SomeObject::memberFunc, this, _1));
生成以下警告
boost/function/function_base.hpp:321:警告:取消引用类型双关指针将破坏严格别名规则
在不设置 -fno-strict-aliasing 的情况下消除这些警告的正确方法是什么?
使用 Boost 1.43 和 GCC 4.4.3,以下代码
boost::bind(&SomeObject::memberFunc, this, _1));
生成以下警告
boost/function/function_base.hpp:321:警告:取消引用类型双关指针将破坏严格别名规则
在不设置 -fno-strict-aliasing 的情况下消除这些警告的正确方法是什么?
只是为了记录,我对使用 GCC 4.4.3 for Google 的 Native Client 的 boost::bind 有同样的警告。将 boost 从版本 1.41.0 升级到 1.47.0 后,警告消失了。
你确定你有正确的对象与成员函数 foo 所在的类匹配吗?换句话说,在您发布的代码中,*this 的类型是否与 SomeObject 相同?当编译器必须跟踪指向相同原始数据的多个不同类型的指针时,就会出现别名,这就是为什么我怀疑 *this 和 SomeObject 的类型不一样的原因。