/* The following code example is taken from the book * "C++ Templates - The Complete Guide" * by David Vandevoorde and Nicolai M. Josuttis, Addison-Wesley, 2002 * * (C) Copyright David Vandevoorde and Nicolai M. Josuttis 2002. * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided "as is" without express or implied * warranty, and with no claim as to its suitability for any purpose. */ #ifndef SQRT_HPP #define SQRT_HPP // primary template to compute sqrt(N) template class Sqrt { public: // compute the midpoint, rounded up enum { mid = (LO+HI+1)/2 }; // search a not too large value in a halved interval enum { result = (N::result : Sqrt::result }; }; // partial specialization for the case when LO equals HI template class Sqrt { public: enum { result = M }; }; #endif // SQRT_HPP