以下のプログラムを 「-Wall -O2」 オプションを付けてコンパイルすると
 test3.cpp:17: warning: dereferencing pointer ‘<anonymous>’ does break strict-aliasing rules
 test3.cpp:17: warning: dereferencing pointer ‘<anonymous>’ does break strict-aliasing rules
 /usr/include/c++/4.4/bits/stl_tree.h:175: note: initialized from here
のようなwarningが出ます。
「-Wall」「-O2」どちらかだけでは出ません。
また、「-Wall -O1」では出ず、「-Wall -O3」では出ます。
これはどういう意味のwarningなのでしょうか?

================================================

// a、bは0~9の値をとるとする
class Hoge
{
 public:
  double a, b;

  Hoge( double a, double b ) : a(a), b(b) { }

  bool operator<( const Hoge& rhs ) const{
   const double l_val = a*10 + b;
   const double r_val = rhs.a*10 + rhs.b; // <- 17行目
   return ( l_val < r_val );
  }
};

int main(int argc, char* argv[])
{
 map<Hoge,int> mmm;
 mmm[ Hoge(0,0) ] = 0;
}