在下面的示例中,函数参数被用于通过requires表达式测试使用它们的表达式是否格式正确。requires表达式不接受任何参数;它直接使用函数作用域中的变量。
上述代码可以在Clang的概念分支上编译通过。然而,GCC10只接受对
#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会出现内部编译错误。Clang在接受它方面是正确的吗?
Resize
和Eziser
都应该被拒绝),或者两个函数都应该编译。我认为clang是正确的。 - Jarod42