[英]template member function of template class called from template function
這不編譯:
template<class X> struct A {
template<int I> void f() {}
};
template<class T> void g()
{
A<T> a;
a.f<3>(); // Compilation fails here (Line 18)
}
int main(int argc, char *argv[])
{
g<int>(); // Line 23
}
編譯器(gcc)說:
hhh.cpp:在函數“void g()”中:
hhh.cpp:18: 錯誤:')' 標記前的預期主表達式
hhh.cpp:在函數“void g() [with T = int]”中:
hhh.cpp:23:從這里實例化
hhh.cpp:18: 錯誤:成員的無效使用(您是否忘記了“&”?)
誰能解釋這是為什么? 有沒有辦法讓它工作?
試試下面的代碼:
template<class T> void g()
{
A<T> a;
a.template f<3>(); // add `template` keyword here
}
根據 C++'03 標准 14.2/4:
當成員模板特化的名稱出現在
.
或->
在后綴表達式中,或在限定 id中的嵌套名稱說明符之后,並且后綴表達式或限定 id 顯式依賴於模板參數(14.6.2),成員模板名稱必須是以關鍵字template
為前綴。 否則,假定該名稱命名為非模板。
根據 n2857 14.3/4 草案,未來的 C++ 標准似乎仍然需要這個關鍵字。 一些編譯器具有特殊模式,允許無錯誤地編譯原始代碼(Comeau 以所謂的放松模式編譯它)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.