dポイントプレゼントキャンペーン実施中!

特殊化すると以下コードがコンパイルエラーになります。
理由も教えていただけると助かります。
※gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4

コンパイルOK >>>>>>>>>>
template <int> class Hoge {};
...
Hoge<99> hoge;
<<<<<<<<<<<<<<<<<<

コンパイルNG >>>>>>>>>>
template <class T> class Hoge {};
template <> class Hoge<int> {};
...
Hoge<99> hoge;

error: type/value mismatch at argument 1 in template parameter list for ‘template<class T> class Hoge’
<<<<<<<<<<<<<<<<<<

A 回答 (1件)

上は


template <int> class Hoge {};
というテンプレートだから, テンプレート引数は int型の値.

下は
template <class T> class Hoge {};
というテンプレートだから, テンプレート引数はなんらかの型.

「99」という型は存在しえないから, 当然エラーになる.
    • good
    • 0
この回答へのお礼

Tacosan様

テンプレート引数がある型のクラスをint型で特殊化したものということですね。
納得しました。ありがとうございました。

お礼日時:2017/12/04 13:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!