在下面的示例中,函数自变量用于测试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