我試圖理解爲什麼(使用gcc 4.8.2)以下代碼不能編譯:調用模板函數成員時,它的名字叫同一個名字
struct A {
template <typename T>
T f() {return T(0);}
};
struct B : A {
using MyT = int;
MyT f() {return (A *)this->template f<MyT>();}
};
int main()
{
B b;
std::cout << b.f() << std::endl;
return 0;
}
如果我改變從f
名稱在基地f1
,那麼下面編譯就好:
struct A {
template <typename T>
T f1() {return T(0);}
};
struct B : A {
using MyT = int;
MyT f() {return this->template f1<MyT>();}
};
運算符優先級。 –
要擴展@ T.C.的評論:'return static_cast (this) - > template f();' –