5
私は問題を再現するために生成することができました最小限のコードは:コードをコンパイルしているときにエラーを以下非タイプのパラメータ・パックで内部クラス・テンプレートを定義するために非タイプのパラメータ・パックを拡張することはできますか?
template <int>
struct Tag { };
Tag<0> w;
template <int... Is>
struct Outer {
template <Tag<Is> &...>
struct Inner {
};
};
int main() {
Outer<0>::Inner<w> f;
}
グラム++(バージョン6.1.1 20160511)の出会い:
pp.cc: In function ‘int main()’: pp.cc:14:21: internal compiler error: unexpected expression ‘Is’ of kind template_parm_index Outer<0>::Inner<w> f;
そして、長く退屈なスタックトレースを生成します。バージョン3.6.0のclang ++は、コードのコンパイルに問題はないようです。型テンプレートパラメータを持つ同じコードは、両方のコンパイラでうまくコンパイル:
template <class>
struct Tag { };
Tag<int> w;
template <class... Ts>
struct Outer {
template <Tag<Ts> &...>
struct Inner {
};
};
int main() {
Outer<int>::Inner<w> f;
}
ので
それをg ++のバグであるか、私はクラステンプレートパラメータの展開には適用されない非型可変長テンプレートパラメータの展開に関する重要な何かが欠けています? GCCのための
「内部コンパイラエラー」は明確にGCCのバグを意味し、関係なく、これは有効なCである++か。 – kennytm
ありがとう!私はそれを知らなかった... –
構文 'template&...>構造体内の{};はどういう意味ですか? –
Zereges