首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否允许要求表达式“捕获”包围作用域的变量?

是否允许要求表达式“捕获”包围作用域的变量?
EN

Stack Overflow用户
提问于 2019-11-05 09:05:57
回答 1查看 220关注 0票数 11

在下面的示例中,函数参数用于使用requires表达式测试使用它们的表达式是否格式良好。requires表达式不带参数;它直接使用函数作用域中的变量:

代码语言:javascript
复制
#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冰克拉昂接受它是对的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-07 01:38:55

是的,requires表达式可以使用范围内的任何内容。毕竟,它只需要它命名的任何东西的类型,但嵌套需求或其他常量表达式除外。对于周围的声明和它自己的(形式)参数也是如此。

C++20在expr.prim.req/5中明确提到了这一点:

需求-主体包含一系列需求。这些要求可以引用本地参数、模板参数和从封闭上下文中可见的任何其他声明。

然而,这仅仅是对一般规则的重申,此后就被删除了。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58707822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档