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
You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.