【发布时间】:2014-09-05 20:01:53
【问题描述】:
在我今天早些时候观看的关于 Unicode 的一次演讲中,当您尝试分配一个太长而无法由 char16_t 类型表示的字符文字时,会发生什么情况有些混乱。演示者说,根据对标准的阅读,该程序应该是格式错误的,但 gcc 无论如何都会接受它。他没有澄清,Youtube 也不允许我提问。
我自己的测试确认以下代码被g++-4.8和g++-4.9接受。 (带有警告。)
int main() {
char16_t a = u'\U0001F378';
}
http://coliru.stacked-crooked.com/a/6cb2206660407a8d
https://eval.in/188979
另一方面,clang 3.4 会产生错误。
哪个编译器是正确的?我找不到这方面的章节。
另外一个小问题,字符文字部分 §2.14.3 没有在 W 语法或部分正文中提及 \u 和 \U 转义序列。这是疏忽吗?
【问题讨论】:
标签: c++ unicode language-lawyer utf-16 string-literals