Clang 3.1声称支持用户定义的文字。我可以定义这样的:Clang 3.1和用户定义的文字
int operator"" _tryit(long double n) { return int(n); }
,但是当我尝试使用它,我得到一个错误:
int m = 5_tryit;
Invalid suffix
'_tryit'
on integer constant
Clang 3.1声称支持用户定义的文字。我可以定义这样的:Clang 3.1和用户定义的文字
int operator"" _tryit(long double n) { return int(n); }
,但是当我尝试使用它,我得到一个错误:
int m = 5_tryit;
Invalid suffix
'_tryit'
on integer constant
5
不能隐在你的情况下转换为long double
。您需要将其更改为5.0
,使之成为长双或显式调用函数自己的隐式转换工作:
int m = 5.0_tryit;
OR
int n = operator"" _tryit(5);
(与clang version 3.1 (trunk) (llvm/trunk 155821)
测试了)
This SO question对规则有很好的解释。
(另外,正如abarnert提到的,确保在编译时将-std=c++11
标志传递给编译器)。
'int m = 5.0_tryit;'? – ildjarn
道歉,如果我侮辱你的智力,但是......看起来像我在C++ 03模式而不是C++ 11模式下编译时得到的错误,或者当我使用clang-3.0而不是3.1时当我误用3.1的C++ 11模式中的后缀时,我得到的错误。你确定你使用的是正确的版本和-std标志吗? – abarnert