template<unsigned long long number, unsigned long long base>
struct ct_log {
    enum {value=ct_log<number/base, base>::value+1};
};
template<unsigned long long base>
struct ct_log<0, base> {
    enum {value=0};
};

#include <iostream>
int main() {
   std::cout << ct_log<100000, 10>::value << '\n';
   std::cout << ct_log<99999, 10>::value << '\n';
}
