2010-09-11 3 views
7

Что не так в следующем фрагменте кода?Ошибка компилятора при использовании integer в качестве параметра шаблона

template<typename X> 
struct A { 
     template<int N> 
     int foo() const { 
       return N; 
     } 
}; 

template<typename X> 
struct B { 
     int bar(const A<X>& v) { 
       return v.foo<13>(); 
     } 
}; 

#include <iostream> 
using std::cout; 
using std::endl; 

int main() { 
     A<double> a; 
     B<double> b; 
     cout << b.bar(a) << endl; 
     return 0; 
} 

Внутри функции B::bar компилятор жалуется:

error: invalid operands of types ‘’ and ‘int’ to binary ‘operator<’

Если А не шаблон, все отлично компилируется.

+2

Возможный дубликат [синтаксиса шаблонов C++] (http://stackoverflow.com/questions/3621719/c-template-syntax) –

ответ

14

Изменения return v.foo<13>(); к return v.template foo<13>(); потому foo является зависимым именем, и вам необходимо отметить, что в явном виде, используя .template конструкции.

Смежные вопросы