2010-01-29

C++0x本:文(Stattements)

文、ステートメント、これらは比較的、簡単だ。簡単というのは、目次作成が簡単だという意味である。

ユーザーが個別の機能としてみている文と、規格上の文は、それほど違わない。式文や、宣言文など、普段、あまり文として意識しない文もあるにはあるが、基本的には、それほどユーザーの認識と乖離していない。

ところで、以下の文がコンパイルできないということを、前に述べた。

decltype(0)(0) ;

このコードはコンパイルできない。そもそも、このコードはなんなのかというと、実は、関数記法の型変換ではないのだ。このコードは、変数の宣言なのだ。

// int x と同じ
decltype(0)(x) ;

// int
std::cout << typeid(x).name() << std::endl ;

なぜ、変数の宣言になるのか。それは、関数記法の型変換と、宣言文とで、文法上、曖昧になるケースが存在する。その場合は、すべて、宣言文として解釈する(たとえ、意味上のエラーになるとしても)というルールがある。そのため、宣言文になってしまう。

それを防ぐためには、括弧が必要である。

// int(0) と同じ。
(decltype(0))(0) ;

No comments: