clang 不编译我的代码,但 g++ 可以

2024-03-02

有人可以帮我解决这个代码吗:

#include <type_traits>

#include <vector>

struct nonsense { };

template <struct nonsense const* ptr, typename R>
typename std::enable_if<!std::is_void<R>::value, int>::type
fo(void* const)
{
  return 0;
}

template <struct nonsense const* ptr, typename R>
typename std::enable_if<std::is_void<R>::value, int>::type
fo(void* const)
{
  return 1;
}

typedef int (*func_type)(void*);

template <std::size_t O>
void run_me()
{
  static struct nonsense data;

  typedef std::pair<char const* const, func_type> pair_type;

  std::vector<pair_type> v;

  v.push_back(pair_type{ "a", fo<&data, int> });
  v.push_back(pair_type{ "b", fo<&data, void> });
}

int main(int, char*[])
{
  run_me<2>();

  return 0;
}

clang-3.3 不会编译这段代码,但 g++-4.8.1 会编译,这两个编译器哪个是正确的?正如我怀疑的那样,代码有问题吗?

错误如下:

a.cpp:32:15: error: no matching constructor for initialization of 'pair_type' (aka 'pair<const char *const, func_type>')
  v.push_back(pair_type{ "a", fo<&data, int> });
              ^        ~~~~~~~~~~~~~~~~~~~~~~~
a.cpp:33:15: error: no matching constructor for initialization of 'pair_type' (aka 'pair<const char *const, func_type>')
  v.push_back(pair_type{ "b", fo<&data, void> });
              ^        ~~~~~~~~~~~~~~~~~~~~~~~~

搬迁static struct nonsense data函数外部获取要编译的代码。我不够聪明,无法告诉你原因。

定制data对于不同的值O参数,可以定义nonsense如下…

template <size_t> struct nonsense {
    static nonsense data;
    ⋮
};

…并因此使用它…

template <std::size_t O, typename R>
typename std::enable_if<!std::is_void<R>::value, int>::type
fo(void* const)
{
  // Use nonsense<O>::data
}

template <std::size_t O, typename R>
typename std::enable_if<std::is_void<R>::value, int>::type
fo(void* const)
{
  // Use nonsense<O>::data
}

⋮

template <std::size_t O>
void run_me()
{
  std::vector<std::pair<char const* const, func_type>> v;

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

clang 不编译我的代码,但 g++ 可以 的相关文章

  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 如何让 Swagger 插件在自托管服务堆栈中工作

    我已经用 github 上提供的示例重新提出了这个问题 并为任何想要自己运行代码的人提供了一个下拉框下载链接 Swagger 无法在自托管 ServiceStack 服务上工作 https stackoverflow com questio
  • 如何将非静态类成员“std::bind”绑定到 Win32 回调函数“WNDPROC”?

    我正在尝试将非静态类成员绑定到标准WNDPROC http msdn microsoft com en us library ms633573 aspx功能 我知道我可以通过将类成员设为静态来简单地做到这一点 但是 作为一名 C 11 ST
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 是否有实用的理由使用“if (0 == p)”而不是“if (!p)”?

    我倾向于使用逻辑非运算符来编写 if 语句 if p some code 我周围的一些人倾向于使用显式比较 因此代码如下所示 if FOO p some code 其中 FOO 是其中之一false FALSE 0 0 0 NULL etc
  • 具有交替类型的可变参数模板参数包

    我想知道是否可以使用参数包捕获交替参数模式 例如 template
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 如何设置 log4net 每天将我的文件记录到不同的文件夹中?

    我想将每天的所有日志保存在名为 YYYYMMdd 的文件夹中 log4net 应该根据系统日期时间处理创建新文件夹 我如何设置它 我想将一天中的所有日志保存到 n 个 1MB 的文件中 我不想重写旧文件 但想真正拥有一天中的所有日志 我该如
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • 如何将 PostgreSql 与 EntityFramework 6.0.2 集成? [复制]

    这个问题在这里已经有答案了 我收到以下错误 实体框架提供程序类型的 实例 成员 Npgsql NpgsqlServices Npgsql 版本 2 0 14 2 文化 中性 PublicKeyToken 5d8b90d52f46fda7 没

随机推荐

  • Flask 模板中的全局变量

    可能不是准确的标题 因为我是 Flask Python 的新手 我正在开发一个内部工具 该工具将由不同的团队使用 每个团队都有不同的部署阶段 例如 alpha beta test prod他们也有多个区域 例如 NA EU APETC 现在
  • 为什么执行相同的按位和 I/O 操作时,我的 Rust 程序比 Go 程序慢 4 倍? [复制]

    这个问题在这里已经有答案了 我有一个 Rust 程序 它对 64 位无符号整数实现强力奇偶校验 use std io use std io BufRead fn parity mut num u64 gt u8 let mut result
  • ReactJs - 条件渲染或隐藏组件

    在条件渲染或隐藏组件之间进行选择的实际方法是什么 display none 为了便于讨论 假设我有一个FilterComponent持有title过滤器的列表 以及FilterItems with name and amount 简而言之
  • 了解 C# 中 Timer 控件的工作原理

    假设我有一个计时器控件 间隔设置为 20 毫秒 在这个控件中 我正在执行一些需要 100 毫秒才能完成的操作 那么一旦执行该操作 Timer 控件是否会再次执行而不等待该操作完成 或者直到该操作未完成时 Timer 才会再次执行 EDIT我
  • 使用 LINQ 获取 DataGridView 行索引,其中第一列具有特定值

    我想获取 DataGridViewRow 的索引 其中第一列的值匹配 到目前为止我的代码 string SearchForThis test int index from r in dgv Rows where r Cells 0 Valu
  • CSS 宽度 100% 包括溢出

    由于各种原因 我有一个嵌套的ol里面的一个div 其中列表的内容超出了容器的大小 由于容器具有固定宽度 因此列表元素的背景不会超出容器的可视区域 但内容可以正常滚动 我创建了一个jsFiddle http jsfiddle net zNv5
  • 包“Microsoft.EntityFrameworkCore.SqlServer”与项目中的“所有”框架不兼容

    我试图添加名为Microsoft EntityFrameworkCore SqlServer通过运行命令 dotnet add package Microsoft EntityFrameworkCore SqlServer 在 Visual
  • 请求执行时如何获取当前Controller层配置的请求映射URL?

    我浏览了很多链接 例如如何在视图中显示所有控制器和映射 https stackoverflow com questions 9766800 how to show all controllers and mappings in a view
  • 当父状态改变时组件卸载

    我正在使用 React 16 8 2 每当应用程序组件中的状态发生更改时 我都会遇到组件卸载的问题 这是场景 我有 App jsx 一个功能组件 和许多状态变量 useState 其中一些状态变量的设置器通过 Context 提供程序 后代
  • 如何使用 android-ndk-r10d 在 Windows 上编译 ffmpeg-2.5.3

    我正在尝试使用 android ndk 10d 在 Windows 上编译 FFMPEG for android 我已经遵循了许多教程 但无法编译它 任何人都可以帮我编译 FFMPEG 我参考了很多博客和教程 但无法检索到预期的结果 我使用
  • iOS 应用程序中 iTunes 音乐商店的音乐预览 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个有趣的问题 可以在 iOS 应用程序中播放 iTunes 音乐商店中的音乐预览吗 怎么做 我需要你的帮助 是的 你可以这样做
  • 文件大小():特定路径的统计失败 - php

    我正在编写一个简单的文档管理脚本 需要在表中获取文件大小和文件类型 文件或文件夹 不知何故 它无法进入提及目录 如果可能的话请帮忙
  • 在 C# 中使用 Task.FromResult 与 wait

    我是 C 异步编程新手 需要看看以下哪一种是处理 Task 对象的首选方法 我有一个类可以这样做 var value this SomeFunction var innerValue await Task FromResult value
  • Luigi:如何将不同的参数传递给叶任务?

    这是我第二次尝试了解如何在 Luigi 中将参数传递给依赖项 第一个是here https stackoverflow com questions 64837259 luigi how to pass arguments to depend
  • 将 Pajek 数据集读入 Networkx

    我正在寻找将 Pajek 数据集转换为 networkxGraph 数据集来自哥斯达黎加家庭关系 http vlado fmf uni lj si pub networks data esna SanJuanSur htm 我正在使用非常方
  • 如何忽略异常并完成尝试

    所以我一直在奋斗这个问题 https stackoverflow com questions 14885288 io exception error when using serialport open大约一周了 我想我知道这个问题 但我不
  • Twig 和自动转义

    我正在学习 Symfony2 目前 我正在尝试在树枝模板中渲染表单标签 该标签包含一个 html 标签 该标签在我的 twig 文件中未正确呈现 下面是创建表单字段的代码段 builder gt add zipcode integer ar
  • Avalon 中的大写编辑

    我正在使用 AvalonEdit 编写电影脚本编辑器 我扩展了 DocumentLine 类以具有 Type 属性 其值表示 字符 对话行 等 我希望脚本中某种类型的文档行以大写形式编写 例如字符名称 渲染管道中是否有一个扩展点可以让我获取
  • 如何在 zend Framework 2 中返回对象数组?

    我正在 zf2 中进行查询 然后得到一个object Zend Db ResultSet HydratingResultSet 我必须foreach上 以便到达属性 我想默认获得一个对象数组 这是我的一些代码 factory address
  • clang 不编译我的代码,但 g++ 可以

    有人可以帮我解决这个代码吗 include