// Prime number computation by Erwin Unruh template struct D { D(void*); operator int(); }; template struct is_prime { enum { prim = (p==2) || (p%i) && is_prime<(i>2?p:0), i-1> :: prim }; }; template struct Prime_print { Prime_print a; enum { prim = is_prime::prim }; void f() { D d = prim ? 1 : 0; a.f();} }; template<> struct is_prime<0,0> { enum {prim=1}; }; template<> struct is_prime<0,1> { enum {prim=1}; }; template<> struct Prime_print<1> { enum {prim=0}; void f() { D<1> d = prim ? 1 : 0; }; }; #ifndef LAST #define LAST 18 #endif main() { Prime_print a; a.f(); }