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>取决于模板参数A,您需要method使用template关键字限定调用:

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