我想在编译时计算e
值(不要担心,不是作业),但出了问题。可能的模板&constexpr-if不兼容
template<size_t limit = 3, class result = std::ratio<0, 1>, size_t factorial = 1, size_t count = 1>
constexpr double e_impl() {
if constexpr(limit == 0) {
return static_cast<double>(result{}.num)/result{}.den;
}
return e_impl<limit - 1, std::ratio_add<result, std::ratio<1, factorial>>, factorial * count, count + 1>();
}
虽然计算值正确,但编译器会在模板中引发有关溢出的错误。看起来好像limit
变量超出范围(低于0
),但它不应该发生,因为0
-case正在由if constexpr(…)
语句处理。
所以问题是,我错了,这种行为应该是预期的,或者它是一个编译器错误?用GCC 7.1.0编译。
A为什么会使这个答案更有用。 –
@CrazyEddie Nouning副词。如何表达。 – Yakk