next up previous contents
Next: About this document ... Up: C++ Tips and techniques. Previous: Linking with Fortran 77   Contents

Templates

Apperently, Erwin Unruh brought this program to one of the ISO/ANSI C++ committee meetings in 1994:
// Erwin Unruh, untitled program, ANSI X3J16-94-0075/ISO WG21-462, 1994.
    template<int i> struct D { D(void*); operator int(); };

    template<int p, int i> struct is_prime {
      enum { prim = (p%i) && is_prime<(i > 2 ? p : 0), i-1>
         :: prim };
    };

    template<int i> struct Prime_print {
      Prime_print<i-1> a;
      enum { prim = is_prime<i,i-1>::prim };
      void f() { D<i> d = prim; }
    };

    struct is_prime<0,0> { enum { prim = 1 }; };
    struct is_prime<0,1> { enum { prim = 1 }; };
    struct Prime_print<2> { enum { prim = 1 };
        void f() { D<2> d = prim; } };

    void foo()
    {
      Prime_print<10> a;
    }



Michael McNeil Forbes 2006-05-26