#pragma once #include #include namespace wrp{ namespace math{ template inline const T max_power_of(const T n) { assert(B > 1); assert(n > 0); std::function f_ = [&](const T c)->const T { const T cb = c * (const T)B; return cb > n ? c : f_(cb); }; return f_(1); } namespace tmp{ template struct max_power_of_2 { private: template struct f_ { private: static const size_t c2 = C << 1; public: static const size_t result = f_::result; }; template struct f_ { static const size_t result = C; }; public: static const size_t result = f_::result; }; } }}