以下のコードは、完全に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 ; } ) ;
まあ、流行るとは思えないが、参考までに。
C++98でも使えますけど。
ReplyDeleteあ、ほんとだ。
ReplyDelete