1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
namespace mon_check_a_moi
{
template<bool> struct check_{};
template<> struct check_<true>
{
template<class T> check_(T const &);
};
}
#ifdef _MSC_VER
# define MON_CAT(a, b) MON_CAT_OO((a, b))
# define MON_CAT_OO(par) MON_CAT_I ## par
# define MON_CAT_I(a, b) MON_CAT_II(a ## b)
# define MON_CAT_II(res) res
#else
# define MON_CAT(a, b) MON_CAT_I(a,b)
# define MON_CAT_I(a, b) a ## b
#endif
#define MY_CHECK(condition,message)\
struct message;\
struct MON_CAT(message,__LINE__)\
{ \
static int ************ (message::************ erreur_()) (); \
}; \
enum{\
MON_CAT(erreur,__LINE__) = sizeof(mon_check_a_moi::check_<condition>(MON_CAT(message,__LINE__)::erreur_()))\
}
template<int T> class MaClasse
{
public:
MY_CHECK(T!=5,T_DOIT_ETRE_DIFFERENT_DE_5);
MY_CHECK(T!=2,T_DOIT_ETRE_DIFFERENT_DE_2);
MaClasse(){
}
~MaClasse(){}
};
int main()
{
MaClasse<4> a;
MaClasse<5> a2;
MaClasse<2> a2;
return 0;
} |
Partager