2012-06-04 22 views
5

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

+4

'int m = 5.0_tryit;'? – ildjarn

+2

道歉,如果我侮辱你的智力,但是......看起来像我在C++ 03模式而不是C++ 11模式下编译时得到的错误,或者当我使用clang-3.0而不是3.1时当我误用3.1的C++ 11模式中的后缀时,我得到的错误。你确定你使用的是正确的版本和-std标志吗? – abarnert

回答

7

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标志传递给编译器)。

+0

但是这个工作:cout << operator“”_tryit(5)<< endl; – John

+0

而“5.0_tryit”则不。 – John

+0

@John:我刚刚用叮当声3.1测试了'int m = 5.0_tryit;',它对我很有用。 –