以下のようなコードを -Wall -O2 オプションを付けてコンパイルすると
 strict_aliasing.cpp:12: warning: dereferencing pointer ‘<anonymous>’ does break strict-aliasing rules
 /usr/include/c++/4.4/bits/stl_tree.h:175: note: initialized from here
というwarningが出ます。
Hogeの別名Fugaを使っていることが原因のようですが、これは良くないプログラムなのでしょうか?
また、解決方法はオプション変更以外にあるのでしょうか?

#include <iostream>
#include <map>
using namespace std;

class Hoge
{
__public:
____double val;
____Hoge( double d ) : val(d) { }

____bool operator<( const Hoge& rhs ) const{
______return (val < rhs.val);
____}
};

typedef Hoge Fuga; // これが悪いらしい

int main(int argc, char* argv[])
{
__map<Fuga,int> fuga2int;
__fuga2int[ Fuga(100) ] = 1;

__return 0;
}