整数の累乗を計算する次のメタ関数を考えてみましょう。
template <std::intmax_t Base, std::intmax_t Exponent>
struct integer_power
{
static constexpr std::intmax_t temporary = integer_power<Base, Exponent/2>::value;
static constexpr std::intmax_t value = temporary*temporary*(Exponent%2 == 1 ? Base : 1);
static constexpr bool overflow = /* something */;
};
template <std::intmax_t Base>
struct integer_power<Base, 0>
{
static constexpr std::intmax_t value = 1;
static constexpr bool overflow = false;
};
結果を整数に格納できない場合、内部変数のオーバーフローが true になるようにしたいと思います。どうやってするか?