2010-01-25

C++0xの定数式について

以下のコードはwell-formedなC++0xのコードである。

int f()
{ return 0 ; }

template < int x >
struct Foo {} ;

Foo< true ? 0 : f() > foo ;

constexpr int x = true ? 0 : f() ;

f()は定数式ではないが、この場合、評価されない。つまり、この初期化式は、定数式である。falseの場合は、コンパイルエラーである。

これはC++0xの変更点である。C++03では、trueでもエラーになる。

このルールは、Conditinal operatorの他にも、logical AND operator, logical OR operatorにも適用される。

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.