私の問題は、次のコードで再開することができます。テンプレートメソッドと、デフォルトのテンプレート引数
test-temp.C:16:47: error: invalid use of type ‘C2<T>’ as a default value for a template template-parameter
template <typename Ti> class Container = C2>
それを:
template <typename T> struct C2;
template <typename T>
struct C1
{
template <typename Type,
template <typename Ti> class Container = C2>
void m() {}
};
template <typename T>
struct C2
{
template <typename Type = int,
template <typename Ti> class Container = C2> // <-- Here is the problem!
void m() {}
};
GNUコンパイラを、バージョン4.8.1には、次のメッセージで失敗メソッドC2 :: mのデフォルトテンプレートパラメータC2を参照します。
明らかに(私の意見ですが)、コンパイラはC2
(<T>
なし)ではなく、デフォルトパラメータとしてC2<T>
を表示しています。だから、それはタイプC2<T>
がContainer
と一致していないので、それが失敗した命令を見つけたとき。
しかし、打ち鳴らす++は、ちょうどまったく同じコードのために、罰金コンパイル!
私の質問:真実を持っているコンパイラ
- ?
- GNUコンパイラの現在のバージョンと同じ感覚を表現するためのいくつかの代替はありますか?
ローカルで事前に感謝
レアンドロ
g ++が間違っていて、テンプレートテンプレートの名前も正しくありません。 – aaronman