Foo {
};
template<int N, class T0, class... Ts>
class Foo<N, T0, Ts...> : public Foo<N + 1, Ts...> {
public:
template<>
static int bar<T0>() {
return N;
}
};
class Bar : public Foo<0, class A, class B, class C> {};
int main() {
std::cout << Bar::bar<A>() << std::endl;
return 0;
}
Ругается на explicit specialization in non-namespace scope ‘class Foo<N, T0, Ts ...>’. Почему компилятор это запрещает?
template<> static int bar<T0>() { return N; } это что?
Специализация шаблона функции bar
а где основной шаблон?
это для обучения или решается практическая задача?
Хочу сделать аналог enum'а без использования макросов Основной шаблон я могу разместить в самом верхнем классе Foo, ошибка всё равно остаётся
а.. это баг gcc, могу лишь посочувствовать
А зачем enum-у макросы? Он и без них работает
Я поспорил с одним человеком, что это возможно
Реализовать enum через шаблоны
Дак можно и без шаблонов
Скорее выглядит как невозможность explicit специализаций внутри класса
не совсем, это именно баг gcc
https://stackoverflow.com/questions/49707184/explicit-specialization-in-non-namespace-scope-does-not-compile-in-gcc
Обсуждают сегодня