gcc 4.6では、以下のコードがエラーになる。
struct X { constexpr X() { } constexpr X f( X x ) { return x ; } } ;
このコードは、well-formedである。なぜならば、クラス型は、クラス定義の内部では不完全型であるが、戻り値や仮引数の型では、完全型であるとみなされるからだ。9.2 Class members [class.mem] paragraph 2
このバグを26日に発見したので、報告したところ、29日に修正された。gcc 2.6.1はこの修正を含むそうだ。
しかし、何で私が実際に何かコードを書こうとするたびに、コンパイラーのバグに出くわすことになるのか。
constexpr constructorを使った、短いコード例を考えているが、特に思いつかない。関数はともかく、クラスオブジェクトをコンパイル時定数にできるというのは、なにか面白そうな例が思いつきそうなのだが、どうも出てこない。困ったものだ。
No comments:
Post a Comment