あなたが具体的に行っていることは、いくつかの理由で不可能です。
まず、static_assert
引数がコンパイル時の定数式である必要があります。value_
間違いなくそうではありません。
というラベルを付けることで、定数式にすることができますconstexpr
。constexpr
ただし、C++11 では非静的データ メンバーは許可されません。たとえそうであったとしてもvalue_
、非静的メンバーであるため、それは役に立ちません。そのため、まだ存在しません。実際のクラスインスタンス、つまりthis
ポインターを持つものがある場合にのみ存在します。あなたのstatic_assert
式はそれらのオブジェクトのいずれも作成しないため、それにアクセスする方法はありません。
したがって、この「作業」を行うには (「作業」が意味のあることを行う範囲で)、次のことを行う必要があります。
- コンストラク
A
ターを指定して、そのインスタンス化をconstexpr
作成できるようにします。constexpr
- コンストラクターを使用して
static_assert
実際に型を作成constexpr
し、問題のデータ メンバーにアクセスする必要があります。
さて、これを行うと、あなたが望むものが得られないことがわかります(このステートメントに基づいて、あなたの質問はあなたが達成しようとしていることを正確に説明していないためです):
第二に、このクラスのオブジェクトが作成されるたびにという意味でした。X はテンプレート パラメータであるため、定数式です。
staticstatic_assert
であることに注意してください。「このクラスのオブジェクトが作成されるたび」は実行時イベントです。実行時に発生するものに対して静的テストを実行することはできません。
あなたが望むのは定期的 assert
であり、ではありませんstatic_assert
。