可変テンプレート引数の学習中、下のコードを g++6.3( C++14対応。ideone.com )で試したら、「 pack は、テンプレート非型仮引数 として無効です 」という構文エラーになってしまいました。その解決方法の助言を 識者の皆さまに伺いたく、投稿させて頂いた次第です。
template< typename ... Types > // 説明によると、この可変テンプレート仮引数パックを、
struct Outer
{
template< template< Types > class ... pack > // このようにテンプレートテンプレート仮引数に使える。
struct Inner{
};
};
int main() {
Outer< char, int > o; // こう書くと下の疑似ソースコードのような感じで展開される、との事だが、追試したら構文エラーになってしまった。
//
// template<
// template< char > class pack_1,
// template< int > class pack_2
// >
// struct Inner{
// };
}
↑は、 https://github.com/EzoeRyou/cpp-book にあるC++11の解説書の 14.4.3 可変引数テンプレート(Variadic Templates) という部分に載っていた物を、追試すべく自分でコードを加えた物です。
実用性はともかく、どこがおかしいのか? を知りたいです。どうぞよろしくお願い致します。
C++11でためしましたか?
-stdオプションで変えられるみたいです。
テンプレート関連はかなりバージョンアップにより、変更があるみたいですね。
ideone.com で、コンパイラを C++14( clang )にしただけで、コンパイルできました。
どうやら同じC++14でも、g++ と clang で違うようだ、という事が分かりました。
clangはg++の置換を目指しているとの事で、ほぼ同じだと思い込んでしまっていたようです。
>C++11でためしましたか?
14→11 でなく、上述の通りコンパイラを変えたらOKでした。
が、↑の助言のおかげで、コンパイラを変える発想に至る事ができました。どうも有難うござい
ました。