(Leko: treba da pukne pri kompilaciji, ne u radu)
Po Nemanjinom uputu (svaka mu se dala), proguglah za tim statičkim potvrdama, i sastavih nešto ovako:
Code:
template <typename T> class TypeValid { public: static const int ok = 1; };
template <> class TypeValid<char> { public: static const int ok = 0; };
#define STATIC_ASSERT_NOT_CHAR(T) switch(0) {case 0: case TypeValid<T>::ok:;}
template <typename A>
int myWheel (const A &a) {
STATIC_ASSERT_NOT_CHAR(A);
return sizeof(a);
}
int main () {
int i;
myWheel(i); // compiles
char c;
myWheel(c); // error, duplicate case
}
Pitam se sad:
1) može li elegantnije, i
2) umesto da kompilator samo kaže kako je dupliran slučaj, mogu li nekako da proturim svoju poruku, makar i uvijeno (npr. ime nedeklarisane promenljive)?