在下面的示例中,函数自变量用于测试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接受它正确吗?
2
ICE始终是编译器问题。
—
Jarod42 '19
我要说的是,无论是如果不允许捕捉局部变量应该拒绝代码(这样既
—
Jarod42 '19
Resize
和Eziser
应该拒绝)或两者功能应该编译。我会说c是正确的。
@ Jarod42是的。GCC行为显然是错误的。我要提交公关 我也认为Clang是正确的,但我想确认一下。
—
metalfox