Bonjour à tous,

D'une manière statique, je définis des données qui seront activées ou non :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
template<class T>
class DataHelper
{
   enum { activated = false; }
};
template<> class DataHelper<Data1> { enum { activated = true }; };
template<> class DataHelper<Data2> { enum { activated = true }; };
template<> class DataHelper<Data4> { enum { activated = true }; };
Puis des opérations sur ces données, pouvant être activées ou non :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
template<class T>
class OPHelper
{
   enum { activated = false; }
};
template<> class OPHelper<OP1> { enum { activated = true }; };
template<> class OPHelper<OP2> { enum { activated = true }; };
template<> class OPHelper<OP3> { enum { activated = true }; };
template<> class OPHelper<OP4> { enum { activated = true }; };
Chaque OPx a besoin de Datax pour fonctionner. Une opération peut-être activée ou non, mais si elle est activée, il lui faut une cohérence de l'activation de la donnée correspondante.

Dans ce cas, j'aimerais lancer une erreur de compilation, car OP3 a été activée, mais pas Data3.

Comment puis-je m'y prendre ? Avec du static_assert ?

Car je ne peux pas faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
static_assert(OPHelper<OP3>::activated && DataHelper<Data3>::activated, "error")
Etant donné que ce ne serait pas une erreur de désactiver la fonctionnalité..

Où alors est-ce qu'il y aurait ce genre d'équivalent ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
#if OPHelper<OP3>::activated
static_assert(DataHelper<Data3>::activated, "OP3 activated but not Data3");
#endif
Merci pour vos réponses

A bientôt