Добрый день всем.
Почему не работает подобная конструкция
template<int n> struct Fact
{
enum { value = n>2?
n * Fact<n-1>::value
: 1};
};
?
Извиняюсь за теги:
template<int n> struct Fact
{
enum { value = n>2?
n * Fact<n-1>::value
: 1};
};
Здравствуйте, alzt, Вы писали:
A>Добрый день всем.
A>Почему не работает подобная конструкция
A>A>template<int n> struct Fact
A>{
A> enum { value = n>2?
A> n * Fact<n-1>::value
A> : 1};
A>};
A>?
Потому что получается бесконечная рекурсия при инстанциировании шаблона. Рекурсию можно остановить сециализацией:
template<int n> struct Fact
{
enum { value = n * Fact<n-1>::value};
};
template<> struct Fact<1>
{
enum { value = 1};
};
Здравствуйте, Bell, Вы писали:
A>>Почему не работает подобная конструкция
A>>A>>template<int n> struct Fact
A>>{
A>> enum { value = n>=2? //подправил
A>> n * Fact<n-1>::value
A>> : 1};
A>>};
A>>?
B>Потому что получается бесконечная рекурсия при инстанциировании шаблона. Рекурсию можно остановить сециализацией:
B>B>template<int n> struct Fact
B>{
B> enum { value = n * Fact<n-1>::value};
B>};
B>template<> struct Fact<1>
B>{
B> enum { value = 1};
B>};
B>
Спасибо.
Наконец-то дошло, я не мог понять, почему в тернарном операторе не прекращается поиск при достижении n<2.