C++ で速度を要求されるプログラムを書いていると、コンパイル時に定数を 2^n に切り上げたいことがあります。というか、必要だったので書いた。 template<size_t N> struct RoundUp { template<size_t M, size_t D> struct _Between { static const size_t MidV = 1 << (M + D / 2); static const size_t Value = N <= MidV ? _Between<M, D / 2>::Value : _Between<M + D / 2, D - D / 2>::Value; }; template<size_t M> struct _Between<M, 1> { static const size_t Value = 1 << (M + 1); }; s