sauf que, en pratique de métaprog, tu peux très bien avoir un truc du genre de
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
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
Partager