我想知道为什么我不能像这样编写代码:
constexpr double radius = 27_km.to_miles(); // _km returns Distance instance
// which has to_miles()
无论是GCC 4.8.1还是Clang 3.4都会报错,除非我将27_km
用括号括起来,否则它们都找不到文字字面量的运算符operator"" _km.to_miles
。
constexpr double radius = (27_km).to_miles(); // fine
根据我对标准的2.14.8节的理解,UDL后缀不能包含句点。那么编译器为什么会解析这段代码呢?它们是正确的还是有bug?
编辑:您可以在此处查看完整示例(使用不同的UDL和方法名称):http://ideone.com/rvB1pk
30_au .to_light_years();
(注意空格)-- 这有点奇怪。 - dyp30_au.to_light_years()
和30_au .to_light_years()
[有一个空格]之间存在差异。我同意Jerry Coffin的分析,这可能是一个错误。 - dyp