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
に変換することはできません。
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
フラグをコンパイラに渡していることを確認してください)。
'int m = 5.0_tryit;'はどうですか? – ildjarn
あなたの知性を侮辱していたら謝罪しますが... C++ 11モードではなくC++ 03モードでコンパイルしたときや、3.1の代わりにclang-3.0を使用したときにエラーが発生するようです私が3.1のC++ 11モードで接尾辞を誤って使用したときのエラーの正しいバージョンと-stdフラグを使用していますか? – abarnert