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 を設定せずにこれらの警告を取り除く正しい方法は何ですか?
記録のために、Google の Native Client に GCC 4.4.3 を使用して boost::bind に対して同じ警告が表示されました。ブーストをバージョン 1.41.0 から 1.47.0 にアップグレードした後、警告は消えました。
メンバー関数 foo が含まれるクラスと一致する正しいオブジェクトを持っていると確信していますか? つまり、あなたが投稿したコードでは、*this の型は SomeObject と同じですか? エイリアスは、コンパイラが同じ生データへの異なる型の複数のポインターを追跡する必要がある場合に発生します。そのため、*this と SomeObject の型が同じではないと思われます。