Because we know that S and K form a Turing complete system then this code incidentally provides a rigorous proof of the Turing completeness of the C++ template system.
#include <iostream> #include <typeinfo> template<class X> class Reduced { public: typedef X value; }; template<class X,class Y> class cons : public Reduced<cons<typename X::value,Y> > { }; class K : public Reduced<K> { }; class S : public Reduced<S> { }; template<class X,class Y> class cons<cons<K,X>,Y> : public Reduced<X> { }; template<class X,class Y,class Z> class cons<cons<cons<S,X>,Y>,Z> : public Reduced<cons<cons<X,Z>,cons<Y,Z> > > { }; template<class X,class Y = typename X::value> class FixedPoint : public Reduced<typename FixedPoint<Y,typename Y::value>::value> { }; template<class X> class FixedPoint<X,X> : public Reduced<X> { }; using std::cout; using std::endl; int main() { // // Run SSSK. Should output SK(SK) // cout << typeid(FixedPoint<cons<cons<cons<S,S>,S>,K> >::value).name() << endl << endl; return 0; }