【发布时间】:2021-08-26 15:02:59
【问题描述】:
为什么没有constexpr这段代码无效:
template<typename ...Tpack>
auto CalculateSum(Tpack ...pack)
{
if constexpr (sizeof...(Tpack) > 0)
return (pack + ...);
else
return 0;
}
int main()
{
std::cout << CalculateSum(2, 3, 4, 5, 7.5, 6) << '\n';
}
而如果参数中只有int,则它是有效的。
编译器说:返回类型中的“auto”在此处推导为“int”,但在前面的 return 语句中推导为“double”
但是constexpr 是如何解决的呢?
【问题讨论】:
-
编译器错误应该可以解释。
-
您确定要混合这样的类型(
int和double)吗? -
@AnmolMishra 关于您建议的编辑,而
constexpr是 C++11 的一部分,折叠表达式和如果 constexpr 都是 C++17 功能,因此该标签不正确。当前的C++标签表示C++20,对于这个Q来说是可以的。
标签: c++ constexpr parameter-pack