// Traditional metaloops to calculate the square root
template <int N, int low=1, int hi=N>
struct Sqrt
{
enum { mid = (lo+ (hi-low)/2 };
enum { result = If< (mid*mid >N), Sqrt<N,low,mid>,
Sqrt<N,mid+1,hi>
>::result } ;
};
template <int N, int low>
struct Sqrt<N, low, low>
{
enum {result = low};
};
cout << Sqrt<16>::result; // print square root of 16