これはなぜ機能しないのですか?numeric_limitsの問題
enum : long {MaxValue = std::numeric_limits<long int>::max()};
私はエラーを取得しています:エラー1つのエラーC2057:定数式が期待
をそれについて一定ではなく、何? long intの制限はコンパイル時にわかりますので、何が問題なのですか?
これはなぜ機能しないのですか?numeric_limitsの問題
enum : long {MaxValue = std::numeric_limits<long int>::max()};
私はエラーを取得しています:エラー1つのエラーC2057:定数式が期待
をそれについて一定ではなく、何? long intの制限はコンパイル時にわかりますので、何が問題なのですか?
問題はstd::numeric_limits<long int>::max()
関数が一定の値を返しますが、それは実行時に呼び出されるであり、あなたが
おそらく、あなただけ(climitsヘッダを参照)の代わりにLONG_MAX
値を使用することができ、コンパイル時に定数値を必要とするということですか?
はい、コンパイル時に関数を実行することはできません。 max()
を参照してください。 http://en.wikipedia.org/wiki/Compile_time_function_executionたぶんGCCはCTFEをサポートしていないかもしれませんが、この文脈では、max()はインライン化されている可能性が高く、定数を返すので、コンパイル時にGCCによってうまく評価されます。 –
'static constexpr T max(); //(C++ 11以降) '...しかし、VS 2012はC++ 11の多くの機能をサポートしていますが、これはVisual Studio 2012のコンパイル時定数としては機能しません(まだC2057を提供します)。 –