4

私の質問は、次のコードについてです。

    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 のテンプレートのその他の仕様を使用すると、コードは正常にコンパイルされます。

上記のコードの何が問題になっていますか?

4

1 に答える 1