#include <iostream>

template < typename T, T b, unsigned int e >
struct pow : std::integral_constant< decltype(b*1), b * pow<T,b,e-1>::value > {} ;

template < typename T, T b >
struct pow<T,b,0> : std::integral_constant< decltype(b*1), 1 > {} ;

int main()
{
    std::cout << pow< char, 'd', 3 >::value << '\n' ;
}
