実は、標準化委員会内に沸き上がっている、意見に、Raw String Literal自体が、プリプロセッサの逆変換の対象になるべきだというものがある。
つまり、
R"delimiter( )deli\ miter" )delimiter" ;
は、
" )deli\\\nmiter\" "
となる。現在の文面では、このコードは、ill-formedである。
そもそも、プリプロセッサは、文字列リテラルを、ひとつのトークンとして、認識できなくてはならないので、これは、当然だと思う。
文字列リテラルを、ひとつのトークンとして認識するので、Raw String Literalの中に、Preprocessor Directiveがあっても、問題はない。
raw string literal を認識するタイミングを「バックスラッシュ改行」の除去より前に変える、ということなのでしょうか。
ReplyDeleteいや、Raw String Literal全体に対して、逆変換がかかるようにするのです。
ReplyDeleteつまり、d-char-sequenceに対しても、逆変換がかかります。
そもそも、プリプロセッサは、string literalを、認識できなければならないのです。
だから、プリプロセスを始める前に、raw string literalかどうかは、分かるのです。
そもそも、規格というのは、具体的な実装方法を定義しているのではなくて、意味を定義しているのです。
規格と同じ結果になれば、どんな実装方法でもいいのです。