1

C++11 の raw 文字列のサポートに関して、Visual Studio 2013 コンパイラにバグがあるようです。

C++11 の新しい生の文字列は、たとえば次のようになりR"(\s(\d+))"ます。正規表現や複数行の文字列に非常に便利です。Visual Studio 2013 (および VS 2012 November CTP) はそれらをサポートしていますが、生の文字列をマクロ (単純なものであっても) 内に配置すると、問題が発生する可能性があります。

この単純なコードはコンパイルされますが、アサーションで失敗します。

#include <assert.h>
#include <string.h>

#define M(s) s

int main(int argc, char* argv[])
{
    const char* s1 = M(R"()\s)");
    const char* s2 =   R"()\s)";
    assert(strcmp(s1, s2) == 0);
    return 0;
}

ノート:

  • マクロは可能な限り単純です。
  • 文字列内で右括弧を削除すると、すべてが機能します。
  • 文字列内のバックスラッシュまたは's'文字が削除されると、コードはコンパイルされません!

それは本当にコンパイラのバグですか?はいの場合、それは既知のバグですか? 回避策はありますか?

4

0 に答える 0