sauf que, en pratique de métaprog, tu peux très bien avoir un truc du genre de
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| template <char c>
class MyCharClass
{
public:
enum{value =c};
};
template <short s>
class MyShortClass
{
public:
enum {value = s};
};
template <int i>
class MyIntClass
{
public:
enum {value = i};
};
template <template <class> class Trait>
{
BOOST_STATIC_CONSTANT(/* on met quoi, là? */, typename Trait::value);
}; |
(code écrit à la va vite, et non vérifié)
Et qu'il ne faut pas te leurrer: une valeur énumérée a, par défaut, la taille d'un int...
C'est à dire que, malgré tout ce qui est indiqué, MyCharClass::value et MyShortClass::value ont quoi qu'il arrive la taille d'un int :P
Là où cela changerait, c'est si tu définis un trait pour les long ou les long long, et, effectivement, il ne passeraient alors pas avec boost sans avoir défini BOOST_NO_INCLASS_MEMBER_INITIALIZATION