У меня есть следующий (упрощенный) код:Использование функции шаблона в шаблон класса
#include <iostream>
class Foo {
public:
template<class T>
static size_t f() {
return sizeof(T);
}
};
template<class A>
class Bar {
public:
template<class B>
static void f(B const& b) {
std::cout << A::f<B>() << std::endl;
}
};
int main() {
Bar<Foo>::f(3.0);
return 0;
}
Он отлично компилируется в MSVC, но в НКУ (5.2.1) это дает следующее сообщение об ошибке:
main.cpp:16:26: error: expected primary-expression before ‘>’ token
std::cout << A::f<B>() << std::endl;
^
(далее следует несколько сотен строк ошибок, связанных с cout). Я полагаю, он не понимает, что A::f
может быть функцией шаблона? Разбивается ли что-нибудь в стандарте?
Спасибо, именно то, что я искал. MSVC очень прощает эти ключевые слова :((Я предполагаю, что он даже не пытается разобрать тело функции, пока не понадобится его экземпляр). – riv