Ответ 1
Это должно быть
return X::template big< char >();
Зависимые имена из шаблонов берутся не для типов, если вы не укажете, что они через typename
, и предполагается, что они не являются шаблонами, если не указано через template
.
Здесь еще одна ошибка компиляции VC9 и GCC 4.2. Следующий код компилируется с VC9 (Microsoft Visual С++ 2008 SP1), но не с GCC 4.2 на Mac:
struct C
{
template< typename T >
static bool big() { return sizeof( T ) > 8; }
};
template< typename X >
struct UseBig
{
static bool test()
{
return X::big< char >(); // ERROR: expected primary-expression
} // before 'char'
};
int main()
{
C::big< char >();
UseBig< C >::test();
return 0;
}
Любые идеи, как я могу это исправить?
Это должно быть
return X::template big< char >();
Зависимые имена из шаблонов берутся не для типов, если вы не укажете, что они через typename
, и предполагается, что они не являются шаблонами, если не указано через template
.