当我们有这些时:
auto city1 = "New " L"Delhi";
auto city2 = L"New " "York";
任何VS2015之前的编译器都会引发错误:
错误C2308:连接不匹配的字符串
但是使用VC2015编译器,它编译得很好,结果类型(auto
推论)是一个宽字符串。
我的问题是:何时以及如何实现这一点 - 任何标准规范?
答案 0 :(得分:8)
在C ++ 03中,这种行为是未定义的。
ISO 14882-2003:2.13.4.3声明
在翻译阶段6(2.1)中,相邻的窄字符串文字是 连接和相邻的宽字符串文字连接在一起。如果一个 窄字符串文字标记与宽字符串文字相邻 令牌,行为未定义。连接字符串中的字符 保持清晰。
不确定何时引入了更改,但行为至少在标准草案N3242中已明确定义。
ISO 14882-2011:2.14.5.13声明
在翻译阶段6(2.2)中,连接相邻的字符串文字。如果两个字符串文字具有相同的encoding-prefix,则生成的连接字符串文字具有该encoding-prefix。如果一个字符串文字没有编码前缀,则将其视为与另一个操作数相同的编码前缀的字符串文字。
因此,在您的情况下,auto
被正确推断为宽字符串文字。