2010-01-25

C++0xの字句について

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

// 変数(U+5909, U+6570)
int \u5909\u6570 = 0 ;

C++0xでは、universal-character-nameが追加されている。Unicodeのコードポイントを、直接記述できるのだ。これは、なんと識別子にも使える。したがって、上記のコードは、well-formedなC++0xのコードであり、いやしくもC++0x完全準拠を謳うコンパイラならば、必ずコンパイルが通るべきコードである。

また、以下のコードはimplementation-dependantである。

int 変数 = 0 ;

ただし、ill-formedとは規定されていない。また、実装がこのような実装依存の文字をサポートしている場合の挙動が規定されている。したがって、実装によっては、このコードは通る。

もちろん、これはプリプロセッサのトークンにも適用される

#define λ []

std::vector<int> v ;
std::for_each(v.begin(), v.end(),
    λ(int value){ std::cout << value << std::endl ; } ) ;

まあ、流行るとは思えないが、参考までに。

2 comments:

Anonymous said...

C++98でも使えますけど。

hito said...

あ、ほんとだ。