ある可変テンプレート仮引数パックを、別のテンプレートテンプレート引数で使う時の構文が、構文エラーになってしまうのは何故? – プログラミング – Home

ある可変テンプレート仮引数パックを、別...
 
通知
すべてクリア

[解決済] ある可変テンプレート仮引数パックを、別のテンプレートテンプレート引数で使う時の構文が、構文エラーになってしまうのは何故?


おもち
 おもち
(@おもち)
ゲスト
結合: 17年前
投稿: 18
Topic starter  

可変テンプレート引数の学習中、下のコードを 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) という部分に載っていた物を、追試すべく自分でコードを加えた物です。

実用性はともかく、どこがおかしいのか? を知りたいです。どうぞよろしくお願い致します。


引用未解決
トピックタグ
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

C++11でためしましたか?
-stdオプションで変えられるみたいです。
テンプレート関連はかなりバージョンアップにより、変更があるみたいですね。


返信引用
おもち
 おもち
(@おもち)
ゲスト
結合: 17年前
投稿: 18
Topic starter  

ideone.com で、コンパイラを C++14( clang )にしただけで、コンパイルできました。
どうやら同じC++14でも、g++ と clang で違うようだ、という事が分かりました。
clangはg++の置換を目指しているとの事で、ほぼ同じだと思い込んでしまっていたようです。

>C++11でためしましたか?
14→11 でなく、上述の通りコンパイラを変えたらOKでした。
が、↑の助言のおかげで、コンパイラを変える発想に至る事ができました。どうも有難うござい
ました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました