我想做的是:
#include <cmath>
template <unsigned A, unsigned B>
struct fu {
constexpr unsigned long power_A_of_B = std::pow(A, B);
};
但是编译器给出错误,因为pow()
不是constexpr
。
为什么标题
中的数学函数不是constexpr
? 例如,log()
,log2()
,pow()
,abs()
和fmax()
不是constexpr
,但
中的其他代码是,例如max()
,min()
和`clamp()'。
为什么header中的数学函数不是ConstExpr?
原因隐藏在std::pow
的文档中:
std::pow,std::powf,std::powl-cpreference.com
错误按Math_ErrHandling中指定的方式报告。
请参阅math_errhandling的文档。
那么如何在constexpr
中处理此宏呢?
所以整个问题是保持与旧规范的兼容性。
唯一可能的解决方案是使用替代实现。 我发现了这样的东西,没有测试过,但看起来很有希望。 在这里发现的。