在下面的示例中,函数参数用于通过require表达式进行测试,以确定使用它们的表达式是否格式正确。 require表达式不带参数;它直接在函数范围内使用变量:
#include <cstddef>
#include <vector>
template<typename T>
void Resize(T &v,std::size_t const n)
{
if constexpr (requires { v.resize(n); })
v.resize(n);
}
template<typename T>
void Eziser(T &v,std::size_t const n)
{
if constexpr (requires { v.eziser(n); })
v.eziser(n);
}
int main()
{
std::vector<int> v;
Resize(v,10u);
Eziser(v,10u);
}
以上代码使用Clang概念分支进行编译。但是,GCC10仅接受对Resize
的呼叫。 GCC9 ICE。 Clang接受它正确吗?