Motivation

This is a motivating example:


int main()
{
    const unsigned int di = 12; 
    const unsigned int oi = 014; 
    const unsigned int hi = 0xc; 

    const unsigned int bi0 = binary_value("1101"); 

    const unsigned int bi1 = binary<1100>::value; 
}

Why in compilation time?


template <unsigned long N> 
struct binary
{
    static unsigned const value
       = binary<N/10>::value * 2   // prepend higher bits
         + N%10;                   // to lowest bit
}; 

template <>                           // specialization
struct binary<0>                      // terminates recursion
{
    static unsigned const value = 0;
};