折叠表达式和函数名称查找

2023-12-28

我正在学习 C++17 中的折叠表达式。我有以下代码

#include <iostream>
#include <vector>

namespace io {
template<typename T>
std::istream &operator>>(std::istream &in, std::vector<T> &vec) {
  for (auto &x : vec)
    in >> x;
  return in;
}

template<class... Args> void scan(Args &... args) {
  (std::cin >> ... >> args);
}
}// namespace io

int main() {
    std::vector<int> s(1), t(1);
    io::scan(s, t);
    std::cout << s[0] << ' ' << t[0] << '\n';
}

Using 海湾合作委员会9.3.0 https://wandbox.org/permlink/HxCd8zcnwIuq6bpR,代码编译并正确运行,但使用铿锵10.0.0 https://godbolt.org/z/wTMzhU,相同的代码无法编译:

<source>:13:16: error: call to function 'operator>>' that is neither visible in the template definition nor found by argument-dependent lookup
  (std::cin >> ... >> args);
               ^
<source>:19:9: note: in instantiation of function template specialization 'io::scan<std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> > >' requested here
    io::scan(s, t);
        ^
<source>:6:15: note: 'operator>>' should be declared prior to the call site
std::istream &operator>>(std::istream &in, std::vector<T> &vec) {
              ^
1 error generated.

为什么 clang 拒绝代码但 gcc 接受它?


这是一个 Clang 错误。 Clang 版本 11 及更早版本没有正确实现折叠表达式中运算符的两阶段名称查找,并且会错误地从恰好执行折叠表达式实例化的词法范围执行第一阶段查找,而不是从模板定义的上下文中进行第一阶段查找。

I 修复了这个 https://github.com/llvm/llvm-project/commit/ed5a18fc0399dce994aa354a33e6f981f9828647相对最近(不幸的是,没有及时赶上即将发布的 Clang 11 版本),测试用例现在是被 Clang trunk 接受 https://godbolt.org/z/sboK3P.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

折叠表达式和函数名称查找 的相关文章

随机推荐

  • Cordova iOS 将单页屏幕方向更改为横向

    我有一个用 Cordova 3 为 iPhone 开发的应用程序 目前该应用程序运行良好 我还限制了当前应用程序的横向视图 即应用程序仅以纵向显示 应用程序由大量描述和报告页面组成 我想要的是纵向显示所有页面并横向显示报告页面 我使用 Ba
  • 在MFC中创建窗口时如何获得最大可能的窗口大小?

    我需要获得正在创建的窗口的最大可能高度和宽度 窗口不会首先最大化 怎么做 您可以使用获取系统指标 https msdn microsoft com en us library windows desktop ms724385 v vs 85
  • 将 SQL 转换为 LINQ 查询 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有以下 SQL 查询 我需要将它放在 LINQ 中 我尝试了几件事 但无法让它工作 这是 SQL 查询 SELECT ST Descrip
  • 如何在 ColdFusion <2016 中保留结构中的分配顺序

    ColdFusion 不保留元素分配给结构的顺序 在我的特定情况下 当我需要从此结构创建 SOAP 信封并且接收者需要以特定顺序接收信封中的数据时 这就产生了问题 从 ColdFusion 2016 及更高版本开始 StructNew 方法
  • 如何使用固定位置的 jQuery 可拖动?

    它在 Firefox 中完美运行 但在 ie chrome 和 Opera 中不起作用 div has position fixed and is draggable 除了 Firefox 之外它不起作用 不要在 CSS 中设置固定 它适用
  • 将winsound转换为linux平台?

    在我不久前编写的一个聊天脚本中 我使用winsound python 库在收到新消息时播放 ding 声音 ding wav 现在我想知道如何才能使其在 Linux 上工作 仅使用 ogg 音频文件 代码如下 import sys impo
  • 在 std::views::join 之后使用 std::views::filter 无法编译

    我在使用时遇到问题std views filter在加入的流 范围上 我不知道这里到底出了什么问题 我想这些元素可能无法使用正确的 复制 移动 语义传递 应该使用引用包装器或其他东西 include
  • 将 mp4 视频保存到设备相机胶卷

    我从一个 NSString 开始 它是 mp4 文件的 url 从这里我希望将该视频保存到设备相机胶卷中 看来我只能保存 mov 文件 所以我必须首先转换 mp4 但我看到的关于此的几篇文章没有帮助 谁能帮助我完成这个任务 提前致谢 您可以
  • C# 使用 StreamReader 读取资源内的文本文件时出现 FileNotFound 异常

    using SteamReader sr new StreamReader text txt 我也尝试不将文本文件放在 resx file The StreamReader您正在使用的构造函数期望该文件存在于磁盘上 如果该文件嵌入到程序集中
  • 当我的应用程序关闭时,如何处理通知操作?

    问题概要 我正在编写一个 iOS 应用程序 它发送提醒通知 让用户通过 x callback url 运行其他应用程序 如果应用程序位于前台或后台 我的一切都可以完美运行 但当我的应用程序关闭时 它就无法运行 当我的应用程序关闭时 通知也会
  • 如何在 Xamarin 中重用相同的视图? XAML

    所以我得到了这段代码 我需要在或多或少的所有页面上重复使用 但是我有点厌倦了更改一个页面并且必须在 10 个或更多地方做同样的事情 有没有更好的方法做这个 使用 Xamarin Forms 也许可以使用自定义控制器或使用标记扩展在堆栈布局内
  • 使用 ISO V2 Coated 等颜色配置文件将 CMYK 颜色转换为 RGB?

    我知道这个问题之前已经以多种不同的方式提出过 但似乎没有一个与我的问题相关 我想转换一个CMYK准确地着色RGB使用颜色配置文件 例如ISO Coated V2 我想这样做 因为简单的数学转换会导致明亮的颜色无法在CMYK色彩空间 理想情况
  • 在 JSON 请求中发送图像

    我在用着JSON with REST用于使用 Web 服务的 api 现在我还需要根据请求发送图像 是否可以 如果是 我需要在客户端 服务器端进行哪些更改 在我的Java代码中 我应该如何发送图像内容 是否需要单独设置内容类型 执行此操作的
  • Python:无需 OpenCV 即可访问相机

    同志们 我想用 Python 从笔记本电脑摄像头捕获图像 目前所有迹象都指向 OpenCV 问题是 OpenCV 的安装是一场噩梦 而且每次您在新系统上重新安装代码时 这个噩梦都会再次发生 有没有更轻量级的方法在Python中捕获相机数据
  • Rails Paperclip S3 重命名数千个文件?

    我正在尝试重命名 s3 中的许多文件 更改当前的回形针has attached file path from stuff id updated at style extension to stuff id counter style ext
  • 为什么我的工具输出会覆盖自身以及如何修复它?

    这个问题的目的是要成为一个典范 https meta stackoverflow com questions 291992它涵盖了各种各样的问题 其答案归结为 你有 DOS 行结尾被输入到 Unix 工具中 任何有相关问题的人都应该清楚地解
  • 有没有办法将 gmpxx.h 与 c++98 一起使用?

    由于我的项目 我需要使用 c 98 和 gmpxx h 但即使对于一个简单的项目 它也不起作用 include
  • Chrome DevTools:SASS 源文件未保存在磁盘上

    我按照 Google 提供的说明设置源映射 https developers google com chrome developer tools docs css preprocessors https developers google
  • Unity错误:UnityEngine.Component'不包含“velocity”的定义

    我对 C 很陌生 所以如果这是显而易见的 请原谅我 我正在按照中的步骤操作本教程 http www instructables com id Make A 2D Infinite Runner with Unity step6 The Ro
  • 折叠表达式和函数名称查找

    我正在学习 C 17 中的折叠表达式 我有以下代码 include