与 static_assert 和 boost::hana 相关的 Clang 编译错误

2023-12-30

考虑以下在 Clang 3.8 上成功编译的问题:-std=c++14.

#include <boost/hana.hpp>

namespace hana = boost::hana;

int main() {
    constexpr auto indices = hana::range<unsigned, 0, 3>();
    hana::for_each(indices, [&](auto i) {
        hana::for_each(indices, [&](auto j) {
            constexpr bool test = (i == (j == i ? j : i));
            static_assert(test, "error");
        });
    });
}

这个测试完全没有意义,但这不是重点。现在考虑一个替代版本,其中测试直接放入static_assert:

#include <boost/hana.hpp>

namespace hana = boost::hana;

int main() {
    constexpr auto indices = hana::range<unsigned, 0, 3>();
    hana::for_each(indices, [&](auto i) {
        hana::for_each(indices, [&](auto j) {
            static_assert((i == (j == i ? j : i)), "error");
        });
    });
}

现在我收到一堆编译错误,说

错误:引用局部变量i在封闭的 lambda 表达式中声明

问题:什么原因导致第二个版本失败?

编辑:这可能是编译器错误吗?我发现当访问时i之前static_assert,一切再次编译:

#include <boost/hana.hpp>

namespace hana = boost::hana;

int main() {
    constexpr auto indices = hana::range<unsigned, 0, 3>();
    hana::for_each(indices, [&](auto i) {
        hana::for_each(indices, [&](auto j) {
            constexpr auto a = i;
            static_assert((i == (j == i ? j : i)), "error");
        });
    });
}

更新:相同的行为可以在 Clang 4.0 和当前开发分支 5.0 上重现。

更新 2:根据@LouisDionne 的建议,我将此作为错误提交:https://bugs.llvm.org/show_bug.cgi?id=33318 https://bugs.llvm.org/show_bug.cgi?id=33318.


这是 Clang 编译器中的一个错误,并已得到承认。这是它的链接:https://bugs.llvm.org/show_bug.cgi?id=33318 https://bugs.llvm.org/show_bug.cgi?id=33318.

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

与 static_assert 和 boost::hana 相关的 Clang 编译错误 的相关文章

  • 删除字符串 C 的第一个字符

    我试图删除字符串的第一个字符并保留其余部分 我当前的代码无法编译 我对如何修复它感到困惑 My code char newStr char charBuffer int len strlen charBuffer int i 1 char
  • 中间件 API 的最佳实践是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们正在开发一个中间件 SDK 采用 C 和 Java 语言 供游戏开发人员 动画软件开发人员 阿凡达开
  • C++ 模板中的名称查找

    我有一些 C 代码 如果没有 fpermissive 选项 就无法再编译 这是我无法分享的专有代码 但我认为我已经能够提取一个简单的测试用例来演示该问题 这是 g 的输出 template eg cpp In instantiation o
  • 如何“杀死”Pthread?

    我正在学习 Pthreads 并且想知道杀死这样一个对象的最佳方法是什么 在寻找类似的问题后 我无法找到 明确 的答案 但请随时向我指出任何相关问题 我正在使用一个小型客户端服务器应用程序 其中服务器主线程正在侦听套接字上的客户端连接 每次
  • 将列表(对象)转换为列表(字符串)

    有没有办法转换List of Object to a List of String 在 c 或 vb net 中而不迭代所有项目 幕后迭代很好 我只想要简洁的代码 Update 最好的方法可能就是进行新的选择 myList Select f
  • 具有多重继承的类的 sizeof

    首先 我知道 sizeof 取决于机器和编译器的实现 我使用的是 Windows 8 1 x64 gcc 5 3 0 没有标志传递给编译器 我从大学讲座中得到了以下代码 include
  • 从窗口内容截取屏幕截图(无边框)

    我正在寻找有关如何使用 C 将表单内容保存在位图中的解决方案 我已经尝试过使用 DrawToBitmap 但它捕获了所有带边框的窗口 这就是这段代码的结果 public static Bitmap TakeDialogScreenshot
  • 如何用C++解析复杂的字符串?

    我试图弄清楚如何使用 解析这个字符串sstream 和C 其格式为 string int int 我需要能够将包含 IP 地址的字符串的第一部分分配给 std string 以下是该字符串的示例 std string 127 0 0 1 1
  • 简单的文档管理系统和API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • .Net Core 中的脚手架以及解决方案中的多个项目

    我创建了一个针对 net461 的 Net Core MVC6 应用程序 我使用了一个我非常熟悉的项目结构 其中我将数据 模型和服务类放置在单独的类库项目中 并且 Web 项目引用这些项目 当我尝试搭建控制器时 我收到一条错误 指出我正在搭
  • std::string 在 Visual Studio 上的具体行为?

    我有一个项目需要读取 写入大文件 我决定使用 ifstream read 将这些文件一次性放入内存中 放入 std string 中 这似乎是在 C 中执行此操作的最快方法 http insanecoding blogspot com 20
  • C 的“char”使用什么字符集? [复制]

    这个问题在这里已经有答案了 简单的问题 我最近开始用 C 编程 有一个简单的问题 C 编程语言在其 char 类型中使用什么字符集 例如 ASCII 还是取决于软件 操作系统 char 本质上是 1 个字节 主要在所有操作系统上 所以默认情
  • 如何解释“错误C2018:未知字符'0x40'?[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 在编译一些代码时 我收到以下信息 错误 C2018 未知字符 0x40 我想知道如何解决这样的问题 这是我要开始的地方
  • 我应该使用多个 HttpClient 来进行批量异步 GET 请求吗?

    我有一个场景 我需要在尽可能短的时间内发出大量 GET 请求 想想大约 1000 个 我知道通常最好保留一个客户端并尽可能重用它 Create Single HTTP Client HttpClient client new HttpCli
  • win32 API 和 .NET 框架之间的选择

    我必须开发一个适用于 Windows 的应用程序 该应用程序将能够通过网络摄像头识别手势来控制鼠标 我将使用 vc 2008 进行开发 但我很困惑是使用 NET 框架还是核心 win32 API 性能对于我的应用程序非常重要 根据 Ivor
  • 如何使用简历实现一个“一网打尽”的异常处理程序?

    我想知道我怎样才能写一个抓住他们全部应用程序级别的异常处理程序将为用户提供恢复应用程序流程的选项 如果您正在运行 Windows 窗体应用程序 将处理程序添加到Application ThreadException event
  • 具有多种类型的 C# 泛型类型推断

    我有以下通用方法 用于将一种类型的输入对象序列化为超类型 如下所示 public string SerialiseAs
  • 如何向 ItemsControl 中的 WPF 按钮添加相同的命令

    如何将命令添加到 wpf 按钮 该按钮是ItemsControl并正在修改ItemsSource itself 这是我的 XAML
  • FakeItEasy 代理方法调用实际实现

    我正在尝试将对假对象的调用代理到实际的实现 这样做的原因是我希望能够使用 Machine Specifications 的 WasToldTo 和 WhenToldTo 它们仅适用于接口类型的伪造 因此 我正在执行以下操作来代理对我的真实对
  • 什么时候使用静态库需要头文件?

    如果我在 Linux 中用 C 创建一个静态库并生成 a 文件 我 或其他人 如何使用该库 例如 我的库定义了一个类 我认为仅仅提供 a 文件是不够的 还需要提供头文件 我如何知道 a 文件必须提供哪些头文件 例如 我是否需要提供我的库代码

随机推荐

  • 在框架外使用 Laravel 4 的 Input 类

    我喜欢 Laravel 4 处理输入的方式 以及如何通过 Input get 获取值 无论它是通过 get post 还是其他方式发送 我正在开发一个不使用 Laravel 作为框架的项目 但如果我可以使用 Input 类 那就太好了 谁能
  • 在 Activity 之上创建一个透明对话框

    背景 我试图在当前活动之上放置一个层 该层将解释当前屏幕上发生的情况 类似于联系 应用程序 https play google com store apps details id com contapps android 我知道有一些解决方
  • 插入图像到Excel

    我正在使用 Visual Basic Express 我想将图像插入 Excel 应用程序 我已经成功了 这是代码 Dim oExcel As Object Dim oBook As Object Dim oSheet As Object
  • momentjs:如何获取特定时区的日期

    简而言之 我希望有时间尊重服务器的时区 我已将机器的时区设置为阿拉斯加 但我将布里斯班时区字符串传递给 moment 现在我需要moment toDate返回与我在 moment 构造函数中传递的时区相同的日期实例 例如 m moment
  • Matplotlib axvspan - 实心填充?

    我正在使用这行代码使用 matplotlib 创建跨图形的垂直跨度 matplotlib pyplot axvspan datetime datetime strptime 09 10 2015 d m Y datetime datetim
  • 如何检查网络路径是否存在?

    在linux中使用python了解网络路径 例如 192 168 1 1 test 是否存在的最佳方法是什么 如果 路径 指的是互联网 URL 则需要查看 urllib 模块 from urllib import urlopen try u
  • 将关系属性从 ER 图转换为 SQL

    目前我是第一次尝试掌握 SQL 所以我正在解决一些问题 这是一个示例数据库规范 学生 姓名 性别 课程 做项目 标题 每个项目都有 两名主管 姓名 性别 部门 所有学生都做一个项目 但并非所有项目都被接受 不止一名学生可以做同样的事情 项目
  • 如何编写迁移来重命名 Rails 中的 ActiveRecord 模型及其表?

    我不擅长命名 并意识到我的 Rails 应用程序中有一组更好的模型名称 有没有办法使用迁移来重命名模型及其对应的表 这是一个例子 class RenameOldTableToNewTable lt ActiveRecord Migratio
  • 如何不覆盖node.js中的文件

    我想让这段代码在文件存在时更改文件名而不是覆盖它 var fileName file fs writeFile fileName txt Random text function err if err throw err console l
  • Spring Boot 外部配置和 xml 上下文

    我想使用 Spring Boot 外部化我的配置 但我想继续部分使用我的 xml 上下文 我的主类 SpringServerApplication java Configuration PropertySources value Prope
  • 无法将类型“__NSArrayM”的值转换为“NSDictionary”

    我有一个 json 我正在尝试用该代码解析它 但它说 无法将类型 NSArrayM 的值转换为 NSDictionary do let dataDictionary NSDictionary try NSJSONSerialization
  • 在 Java 中,如果我的集合是只读的,我是否需要将其声明为同步?

    当我的 J2EE web 应用程序启动时 我会一次性填充一个集合 然后 多个线程可以同时访问它 但只能读取它 我知道使用同步集合对于并行写入是强制性的 但是我仍然需要它来进行并行读取吗 通常不会 因为在这种情况下您不会更改集合的内部状态 当
  • window.location.href 在 Ipad 和 Iphone 中不起作用

    我在表单中使用了 Google Login API 登录用户后 我使用window location href将用户重定向到另一个页面 但它不起作用iPad and iPhone window location href http exam
  • Ruby on Rails - 将参数传递到routes.rb中的301重定向

    我想更改 paths rb 中现有的 游戏 路由 但由于 SEO 我还需要为旧链接设置 301 重定向 我的旧路由 match games permalink id page gt games show 新路由 match gierki p
  • Angular2 中 api 调用后重定向到路由

    在处理 通过 api 用户通过表单提交的数据后 我需要将用户重定向到不同的组件 下面是我尝试过的代码 在组件中 onSubmit model if model valid true this SharedService postFormda
  • 更改日期选择器背景颜色

    我正在尝试显示一个DatePicker另一个活动之上的对话框 正在发生的事情是它以某种方式继承了它的颜色 I d like it to have a green header and white background 这是样式的摘录
  • Wcf 和接口作为参数

    我有一个库 其中一些实体共享相同的接口 客户和服务共享这个程序集 现在我想知道是否有一种方法可以将此接口类型作为我的服务合同中的参数 以便我可以对实现该接口的所有类使用相同的方法 实体本身都用 datacontract attribute
  • 如何在 NHibernate 中删除子对象?

    我有一个父对象 它与子对象的 IList 具有一对多关系 删除子对象的最佳方法是什么 我不会删除父级 我的父对象包含子对象的 IList 以下是一对多关系的映射
  • 如何更改图像的亮度

    我的问题 我希望能够更改资源图像的亮度 并将其三个实例作为 ImageIcons 一张亮度为 50 较暗 另一张亮度为 75 稍亮 最后一张亮度为 100 与原始图像相同 我还想保持透明度 我尝试过的 我四处搜寻 看起来最好的解决方案是使用
  • 与 static_assert 和 boost::hana 相关的 Clang 编译错误

    考虑以下在 Clang 3 8 上成功编译的问题 std c 14 include