2012-06-04 7 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++ 11モードではなくC++ 03モードでコンパイルしたときや、3.1の代わりにclang-3.0を使用したときにエラーが発生するようです私が3.1のC++ 11モードで接尾辞を誤って使用したときのエラーの正しいバージョンと-stdフラグを使用していますか? – abarnert

答えて

7

5は、暗黙のうちにあなたのケースでlong doubleに変換することはできません。

int m = 5.0_tryit; 

OR

int n = operator"" _tryit(5); 

clang version 3.1 (trunk) (llvm/trunk 155821)の両方をテストした):あなたが動作するように暗黙的な変換のためにあなた自身をそれは長い、二重にするために 5.0に変更したり、明示的に関数を起動する必要があります

This SO questionにはルールの説明があります。

(また、abarnertに言及すると、コンパイル時に-std=c++11フラグをコンパイラに渡していることを確認してください)。

+0

しかし、これは動作します:cout << operator "" _tryit(5)<< endl; – John

+0

「5.0_tryit」はありません。 – John

+0

@ジョン:私は 'int m = 5.0_tryit;'をclang 3.1でテストしました。 –

関連する問題