2

次のコードは、Visual C++ 2010 では正常にコンパイルされますが、Android NDK r8b の GCC 4.6 ではコンパイルされません。

template<typename A>
struct foo
{
    template<typename B>
    B method()
    {
        return B();
    }
};

template<typename A>
struct bar
{
    bar()
    {
        f_.method<int>(); // error here
    }

private:
    foo<A> f_;
};

GCCが与えるエラーは

error : expected primary-expression before 'int'
error : expected ';' before 'int'

マークされた行のために。私の人生では、何が悪いのか理解できません。

4

1 に答える 1

8

GCCは正しいです。これは、テンプレートパラメータに依存するf_タイプであるため、次のキーワードで呼び出しを修飾する必要があります。foo<A>Amethodtemplate

f_.template method<int>();  // This will work
于 2012-09-27T20:03:32.627 に答える