2010-04-01

Raw String Literalは、まだ決定していない

実は、標準化委員会内に沸き上がっている、意見に、Raw String Literal自体が、プリプロセッサの逆変換の対象になるべきだというものがある。

つまり、

R"delimiter( )deli\
miter" )delimiter" ;

は、

" )deli\\\nmiter\" "

となる。現在の文面では、このコードは、ill-formedである。

そもそも、プリプロセッサは、文字列リテラルを、ひとつのトークンとして、認識できなくてはならないので、これは、当然だと思う。

文字列リテラルを、ひとつのトークンとして認識するので、Raw String Literalの中に、Preprocessor Directiveがあっても、問題はない。

2 comments:

Takuya said...

raw string literal を認識するタイミングを「バックスラッシュ改行」の除去より前に変える、ということなのでしょうか。

江添亮 said...

いや、Raw String Literal全体に対して、逆変換がかかるようにするのです。
つまり、d-char-sequenceに対しても、逆変換がかかります。

そもそも、プリプロセッサは、string literalを、認識できなければならないのです。
だから、プリプロセスを始める前に、raw string literalかどうかは、分かるのです。

そもそも、規格というのは、具体的な実装方法を定義しているのではなくて、意味を定義しているのです。
規格と同じ結果になれば、どんな実装方法でもいいのです。