为什么没有使用static_assert打印的换行符/其他控制序列?

时间:2017-09-23 05:19:16

标签: c++11 string-literals static-assert

int main(int argc, char **argv) {
    static_assert(false, R"error(This is an error message.  You need to

1. Pick up the phone.
2. Call GhostBusters.
3. Run and hide.

)error");
}

给出

error: static_assert failed "This is an error message. You need to\n\n1. Pick up the phone.\n2. Call GhostBusters.\n3. Run and hide.\n\n"
    static_assert(false, err);
    ^             ~~~~~
1 error generated.

有没有人知道这些是"未转义的原因"?它是编译器/平台依赖的吗?标准的一部分?

2 个答案:

答案 0 :(得分:1)

GCC为您提供了所需的换行符:https://godbolt.org/g/jS7Sgm

确切的表示取决于编译器。是否打印转义代码可能最好被描述为"实施质量"问题。

答案 1 :(得分:1)

标准只是说:

  

生成的诊断消息(4.1)应包括字符串文字的文本(如果提供了该文本),但不包括不在基本源字符集(5.3)中的字符出现在诊断消息中。

换行符是基本源字符集的一部分,因此需要它们出现"出现"。完全他们出现的不是标准控制的问题。