カスタムクラスのインスタントをテンプレートパラメータとして使用しようとしています。
class X {
public:
X() {};
};
template <class Foo, Foo foo>
struct Bar {
};
const X x;
Bar<X, x> foo;
x
コンパイラは、定数式に表示できないと述べています。どうして?コンパイル時にそのオブジェクトを構築するために与えられたすべてがあります。
カスタムクラスのインスタントをテンプレートパラメータとして使用しようとしています。
class X {
public:
X() {};
};
template <class Foo, Foo foo>
struct Bar {
};
const X x;
Bar<X, x> foo;
x
コンパイラは、定数式に表示できないと述べています。どうして?コンパイル時にそのオブジェクトを構築するために与えられたすべてがあります。
あなたはそれをすることはできません。標準 14.1 は次のように述べています。
4非型のテンプレートパラメータは、次の (オプションで cv 修飾された) 型の 1 つを持つものとします:
— 整数型または列挙型
— オブジェクトへのポインタまたは関数へのポインタ
— オブジェクトへの参照または関数への参照
— メンバへのポインタ.
5 [ 注:テンプレート引数の形式を管理する規則 (14.3)によって、以下で明示的に、または暗黙的に、他の型は許可されません。--end note ] template-parameter の最上位の cv-qualifiers は、そのタイプを決定するときに無視されます。
テンプレート パラメーターは、型または整数定数にすることができます。 X
タイプですが、x
そうではありません。定数浮動小数点値も使用できません。