私の質問は、次のコードについてです。
template <class...T>
class A
{
public:
template <class...S>
static void a() { }
};
template <class...T>
class B
{
public:
template <class...S>
void b()
{
A<T...>::a<S...>();
}
};
int main(int argc, char** argv)
{
return 0;
}
A
可変個引数テンプレートを持ち、別の可変個引数テンプレートを持つ静的メソッドを含むクラスがありa
ます。他の場所 (この場合はクラスB
) から、渡したい 2 つの異なる可変個引数テンプレートのセットがありますA::a
。
コンパイラ (GCC 4.8.1) は、次のエラー メッセージを表示します。
main.cpp: In static member function ‘static void B<T>::b()’:
main.cpp:16:22: error: expected primary-expression before ‘...’ token
A <T...>::a<S...>();
^
main.cpp:16:22: error: expected ‘;’ before ‘...’ token
また、メソッドb()
を次のように変更すると、次のようになります。
void b()
{
A<int, char, short>::a<S...>();
}
または A のテンプレートのその他の仕様を使用すると、コードは正常にコンパイルされます。
上記のコードの何が問題になっていますか?