Мне интересно, какая разница между использованием статической константы и перехвата перечисления при использовании методов метапрограммирования шаблонов.
EX: (Фибоначчи через TMP)
template< int n > struct TMPFib {
static const int val =
TMPFib< n-1 >::val + TMPFib< n-2 >::val;
};
template<> struct TMPFib< 1 > {
static const int val = 1;
};
template<> struct TMPFib< 0 > {
static const int val = 0;
};
против.
template< int n > struct TMPFib {
enum {
val = TMPFib< n-1 >::val + TMPFib< n-2 >::val
};
};
template<> struct TMPFib< 1 > {
enum { val = 1 };
};
template<> struct TMPFib< 0 > {
enum { val = 0 };
};
Зачем использовать один над другим? Я читал, что enum hack использовался до того, как static const поддерживался внутри классов, но зачем использовать его сейчас?