#include #include #include #include #include #include #include namespace mpl = boost::mpl; namespace client { // pow(Value, Exponent) template struct pow : mpl::times< Base, pow > > ::type { }; // specialization for 0 template struct pow > : mpl::int_ < 1 > ::type { }; // the pow10 mpl function template struct pow10 : pow, Exponent > { }; } template void display_pow(U x) { std::cout << "[mpl] pow10(" << U::value << ")=" << client::pow10< U > () << " (real value=" << std::pow(10.0, float(U::value)) << ")" << std::endl; } int main() { display_pow(mpl::int_ < 0 > ()); display_pow(mpl::int_ < 1 > ()); display_pow(mpl::int_ < 3 > ()); #if 0 // concept pow10_vector<0,7> pow10; assert(pow10(2) == 100); #endif return 0; }