我想在編譯時計算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