【发布时间】:2013-10-16 03:52:00
【问题描述】:
我想知道为什么我不能写这样的代码:
constexpr double radius = 27_km.to_miles(); // _km returns Distance instance
// which has to_miles()
GCC 4.8.1 和 Clang 3.4 都抱怨他们找不到文字运算符 operator"" _km.to_miles,除非我将 27_km 括在括号中:
constexpr double radius = (27_km).to_miles(); // fine
通过阅读标准的第 2.14.8 节,UDL 后缀不能包含句点,那么为什么编译器会这样解析代码?它们是正确的还是错误的?
编辑:您可以在此处查看完整示例(使用不同的 UDL 和方法名称):http://ideone.com/rvB1pk
【问题讨论】:
-
我什至不知道C++11的这个特性,谢谢!
-
您能否展示一个产生错误的完整示例?
-
我添加了一个示例链接。
-
这个版本在 clang++3.4 上编译:
30_au .to_light_years();(注意空格)——这很奇怪。 -
我并不是说插入空格使其工作很奇怪(我怀疑它会工作、尝试并成功),但奇怪的是
30_au.to_light_years()和 @987654328 之间存在差异@ [带空格]。我同意 Jerry Coffin 的分析,即这可能是一个错误。
标签: c++ c++11 user-defined-literals