なぜ次のコードが間違っていますか?非型パラメータのテンプレート引数は式でなければなりません
template <typename T, int N>
struct Vector {
T data[N];
};
struct Dynamic {
};
template <typename T>
struct Vector<T, Dynamic> {
T* data;
};
私はVector<int, Dynamic> obj;
でコードをインスタンス化しようとしましたが、それは
error: template argument for non-type template parameter must be an expression
なぜ働きませんでしたか?私は型を渡しており、それが有効なテンプレートの特殊化だと思っていました。
2つのテンプレートを使用し、Nを要求するテンプレートとDynamic
とマークされていないテンプレートを使用するにはどうすればよいですか?
プライマリテンプレートは 'int'を想定していますが、特殊化では' Dynamic'を提供しているので無効です。 – user2296177
エラーメッセージに何が間違っているとは限りませんか? 'Dynamic'は式ではなく、型名です。これは 'int'の値ではありません。 –
@KerrekSB大丈夫ですが、なぜ[this](http://coliru.stacked-crooked.com/a/0b131d123ca803a5)は動作しませんか?これはまったく無関係の別のテンプレートです – Dean