【发布时间】:2018-08-31 14:24:59
【问题描述】:
我试图将一个函数应用于参数包中的每种类型,然后折叠结果。
示例: https://godbolt.org/z/0YNon_
#include <cstdint>
#include <string>
template<typename T>
bool CheckCondition(std::uint64_t i){
return i>sizeof(T);
}
template <typename... ToCheck>
bool AnyCheckCondition(std::uint64_t i){
return CheckCondition<ToCheck>(i)||...;
}
int main()
{
return AnyCheckCondition<std::string,std::uint64_t, std::int64_t>(10);
}
很遗憾,折叠表达式无法编译,我不确定为什么或如何修复它。
我收到以下错误
<source>: In function 'bool AnyCheckCondition(uint64_t)':
<source>:11:35: error: parameter packs not expanded with '...':
return CheckCondition<ToCheck>(i) || ...;
~~~~~~~~~~~~~~~~~~~~~~~^~~
<source>:11:35: note: 'ToCheck'
<source>:11:38: error: expected ';' before '||' token
return CheckCondition<ToCheck>(i) || ...;
^~~
;
<source>:11:39: error: expected primary-expression before '||' token
return CheckCondition<ToCheck>(i) || ...;
^~
Compiler returned: 1
【问题讨论】:
-
请详细说明
isn't particularly appreciated -
不编译
-
return (CheckCondition<ToCheck>(i) || ...);- 你忘了括号。
标签: c++ templates gcc visual-c++ c++17