std::tuple 的实现是否允许因触发空类元素的派生到基类转换而失败?

2023-12-31

此代码无法使用 GCC4.7 编译

struct A {};
void f(A);

struct B { B(std::tuple<A>); };
void f(B);

int main() {
  f(std::make_tuple(A()));
}

因为GCC源自A利用空基类优化。然而,这导致 GCC 选择f(A)并抱怨

error: 'A'是一个无法到达的基地'tuple<A>'

这个错误是 C++ 标准授予的还是这只是 libstdc++ 的一个错误?


我会说no.

至少:

§20.4.1 [元组.一般]

1/[...] 具有两个参数的元组的实例化类似于具有相同两个参数的对的实例化。见20.3。

And yet:

#include <tuple>

struct A {};
void f(A);

struct B { B(std::tuple<A, A>); };
void f(B);

int main() {
  f(std::make_tuple(A(), A()));
}

fails http://liveworkspace.org/code/2KmeWQ%241 with:

Compilation finished with errors:
source.cpp: In function 'int main()':
source.cpp:10:30: error: 'A' is an ambiguous base of 'std::tuple<A, A>'
source.cpp:4:6: error: initializing argument 1 of 'void f(A)'

我非常怀疑这就是标准的意图。

尽管如此,至少可以说§20.4 相当简洁......

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

std::tuple 的实现是否允许因触发空类元素的派生到基类转换而失败? 的相关文章

  • 不同提供商的相同 EDMX 文件

    我正在开发一个项目 其中有一个本地数据库 SQL CE 在不存在与服务器的连接的情况下用作缓冲区 在服务器上我想使用相同的数据库布局 当然 我想使用服务器和客户端上可用的 Common dll 中的相同 EDMX 文件 在客户端中 我有一个
  • 套接字编程-listen() 和accept() 有什么区别?

    我一直在读本教程 http www cs rpi edu moorthy Courses os98 Pgms socket html了解套接字编程 看来listen and accept 系统调用都做同样的事情 即阻塞并等待客户端连接到使用
  • 读取大文件并制作字典

    我有一个大文件 我需要读取它并从中制作字典 我希望这一切能够尽可能快 然而我的Python代码太慢了 这是一个显示问题的最小示例 首先制作一些假数据 paste lt seq 20000000 lt seq 2 20000001 gt la
  • 如何使用最小起订量模拟私有只读 IList 属性

    我试图嘲笑这个列表 private readonly IList
  • 无需登录即可在 Intranet 上获取 Web 应用程序的域\用户名

    我的 Intranet 上有一个 Web 应用程序 VS 2005 有几个页面不需要用户登录应用程序 反馈和默认页面 我正在尝试获取要显示和 或发送反馈的域名和用户名 有没有一种方法可以在不需要用户登录的情况下执行此操作 我试过了this
  • 在异步请求中使用超时回调

    我之前问过这个问题 但我将用提出的解决方案来完成这个问题 并提出另一个问题 我正在使用这个类来进行异步网络请求 http msdn microsoft com en us library system net webrequest aspx
  • std::bind2nd 和 std::bind 与二维数组和结构数组

    我知道 C 有 lambda 并且 std bind1st std bind2nd 和 std bind 已弃用 然而 从C 的基础开始 我们可以更好地理解新特性 所以 我从这个非常简单的代码开始 使用int 数组s 第一个例子 与std
  • c 使用 lseek 以相反顺序复制文件

    我已经知道如何从一开始就将一个文件复制到另一个文件 但是我如何修改程序以按相反的顺序复制它 源文件应具有读取访问权限 目标文件应具有读写执行权限 我必须使用文件控制库 例如 FILE A File B should be ABCDEF FE
  • AcceptSocket 超时?

    是否有可能AcceptSocket on a TcpListener具有超时的对象 以便它偶尔被中断 TcpListener server new TcpListener localIP port server Start while sh
  • 打开位置设置页面或提示用户启用位置

    我一直在绞尽脑汁 徒劳地谷歌搜索 我正在尝试找到一种方法来提示用户通过直接进入设置页面或仅点击屏幕上的 是 来切换位置 我见过的所有代码似乎都不起作用 有人有有效的方法吗 一个详细的例子将不胜感激 谢谢 我对 Xamarin 开发非常陌生
  • 应用新设置时如何防止 GraphicsDevice 被丢弃?

    我的游戏窗口允许手动调整大小 这意味着它可以像任何其他普通窗口一样通过拖动其边缘来调整大小 游戏还利用了RenderTarget2D rt2d 在主 Draw 方法中设置主渲染目标 GraphicsDevice SetRenderTarge
  • 多线程 - 比单线程慢

    当我使用多个线程而不是单线程运行程序时 它会变慢 不是应该更快吗 该程序应该遍历从起始目录开始的所有目录 并查找并打印所有名为 X 的文件 代码如下 while done pthread mutex lock lock if list is
  • 多个线程访问一个变量

    我在正在读的一本教科书中发现了这个问题 下面也给出了解决方案 我无法理解最小值怎么可能是 2 为什么一个线程不能读取 0 而所有其他线程都执行并写入 1 而无论是1还是2 最后写入的线程仍然必须完成自己的循环 int n 0 int mai
  • 为什么 rand() 总是返回相同的值? [复制]

    这个问题在这里已经有答案了 可能的重复 在C中生成随机数 https stackoverflow com questions 3067364 generating random numbers in c 使用 rand 生成随机数 http
  • 在 Windows 上使用 C/C++ 开发时省略 msvcr100.dll?

    是否可以在 Windows 上使用 C C 进行开发而不链接到 msvcr100 dll 我知道这是 Windows 的标准 c 库 但我想知道如果我没有安装 Visual Studio 或 Redistributable 软件包 我的计算
  • 在 C# 窗口应用程序中运行 C/C++ 控制台应用程序?

    现在 我想开发一个简单的应用程序 因此我决定最快的编码方式是 C NET 但现在 我很难实现我需要的功能之一 我想做的是在 C 应用程序的窗口内运行 C C 控制台应用程序 就像在虚幻前端中一样 添加一点通信方式 以便我可以为控制台应用程序
  • 包含从代码隐藏 (ASP.NET C#) 到 ASPX 中的图像概述的图像列表 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何获取运行或段落的高度

    我找到了Run or Paragraph in FlowDocument现在我需要知道HEIGHT of it i e while navigator CompareTo flowDocViewer Document ContentEnd
  • 有没有办法在 C# 中仅通过文件名查找文件?

    我们现在使用绝对路径或相对路径在 C 应用程序中查找文件 如果文件位于当前工作目录下或 路径 之一下 有没有办法仅通过名称查找文件 使用绝对路径不好 使用相对路径也不够好 因为我们可能通过重命名或移动项目文件夹来更改项目结构 如果我们的代码
  • 线程安全的有限大小队列,不使用锁

    我正在尝试编写一个主题队列 但遇到死锁和其他多线程问题 我想用Interlocked CompareExchange避免lock用法 但这段代码并没有按预期工作 它只是擦除整个队列 我在这里做错了什么 public class FixedS

随机推荐

  • Facebook JavaScript SDK 是否有 TypeScript 接口定义

    TypeScript 包包含 Node js 和 jQuery 的接口定义 我想知道是否有人已经为 Facebook JavaScript SDK 编写了定义 你可以用tsd https github com DefinitelyTyped
  • Eclipse RCP 应用程序:如何禁用特定扩展?

    我正在使用 Eclipse HELIOS 编写富客户端应用程序 以下条目会自动添加到我的应用程序 视角菜单 中 Java Java 浏览 Java 类型层次结构 团队同步 我需要摆脱他们 我正在使用扩展点 org eclipse ui ac
  • SQL Server SP_SEND_DBMAIL 图像文件附件

    我正在表上使用触发器来使用 sp send dbmail 发送电子邮件 我想在图像类型的电子邮件中包含文件附件 jpeg 的原始数据存储在二进制类型的 ndl Image 列中 我有以下代码 DECLARE ReferenceID varc
  • 使用适用于 Windows 的 Git 推送到 GitHub 时出错

    我已经在 GitHub 上创建了一个 Git 存储库 也创建了一个本地存储库 首先 我将远程存储库拉入本地存储库 然后我添加了一个文件 暂存该文件 提交了它 现在我尝试再次推送到远程存储库 但失败并显示以下消息 Pushing to htt
  • 在 Flutter 中隐藏滚动条上的底部导航栏

    我在正文和底部导航栏中有一个博客文章列表 我想在帖子列表向下滚动时使用向下滑动动画隐藏底部导航栏 并在向上滚动时使用向上滑动动画可见 怎么做 此解决方案只是解决此问题的方法 可能会发生一些有害的变化 import package flutt
  • Linq to NHibernate 与 ICriteria

    我通常经常使用 LINQ 尤其是 LINQ to Objects 因此我对 LINQ 相当熟练 我正在考虑使用 LINQ to NHibernate 作为我的 NHibernate 项目的查询语言 当我编写一些测试时 我注意到 LINQ t
  • 使用 Spring Kafka 添加自定义标头

    我计划使用 Spring Kafka 客户端在 Spring Boot 应用程序中使用 kafka 设置并生成消息 我看到 Kafka 0 11 中对自定义标头的支持详情here https issues apache org jira b
  • ionic 2 - inappbrowser“browser.on(...).subscribe 不是函数”错误

    我遵循这个http ionicframework com docs native in app browser http ionicframework com docs native in app browser 在appbrowser中使
  • Ruby 解压数组以阻止

    settings 127 0 0 1 80 0 0 0 0 443 我能怎么做 settings each do ip port end 代替 settings each do config ip port config end 您的第一个
  • 为什么我的图标不会在新的 Chrome 网上应用店中显示为完整尺寸?

    我在 Chrome 应用商店中发布了一个扩展程序 昨晚 网上商店的外观焕然一新 现在我的图标看起来非常小 位于拼图游戏的内部 我跟着指示 https developer chrome com extensions manifest icon
  • iPhone - 是否不可能获取 CALayers 组合的内容?

    我在屏幕外 UIView 比 320x480 大得多 上有一个 CALayer 进行 3D 转换 如何将 UIView 上看到的内容转储到 UIImage 中 注意 我已经编辑了问题以包含此代码 这就是我创建图层的方式 CGRect are
  • 如何从ITK注册中获得变换仿射?

    进行 3D MRI 扫描A B and C我想执行仿射 联合 配准B onto A 取配准的变换仿射矩阵并将其应用于C 我的问题是配准变换的仿射矩阵的符号错误 也许是因为方向错误 The TransformParameters包含 12 个
  • 从 UIColor 预设中获取 RGB 值

    在我的应用程序中 我将 RGB 颜色值传递给服务器 我的应用程序使用 UIColor 预定义值 例如 UIColor greyColor UIColor redColor 我知道我可以使用以下代码 const CGFloat c CGCol
  • 使用双指针时的奇怪行为

    我需要帮助来理解为什么在这个小程序中我无法正确操作指针 include
  • 如何在 vim 中创建映射以自动执行 .h c++ 文件的 ifdef 命令

    如何在 vim 中创建映射以自动执行 h c 文件的 ifdef 命令 基本上我想要一个映射来创建以下可与 h 和 hpp 等一起使用的内容 ifndef
  • 使用 Android AccountManager 进行第三方 OAuth2 授权

    我正在开发一个应用程序 需要通过 OAuth2 从第三方网络服务获得授权 第三方意味着它不是 Google 并且我不拥有它 本文 http developer android com training id auth authenticat
  • Python 中的欧拉项目#8

    求 1000 位数字中 5 个连续数字的最大乘积 import time num 73167176531330624919225119674426574742355349194934 9698352031277450632623957831
  • 如何实现didReceiveMemoryWarning?

    我开发了一个简单的位置感知 iPhone 应用程序 除了手机内存不足的情况外 该应用程序的功能非常符合我们的预期 在手机内存不足的情况下 我的应用程序只会崩溃 如果我通过释放一些空间来增加手机内存 它会再次开始正常工作而不会发生任何崩溃 当
  • Python 文件读+写

    我正在致力于将数据库从自定义 MSSQL CMS 移植到 MYSQL Wordpress 我正在使用 Python 读取 txt 文件 t划定的列和每行一行 我正在尝试编写一个 Python 脚本来读取此文件 fread 并 最终 创建一个
  • std::tuple 的实现是否允许因触发空类元素的派生到基类转换而失败?

    此代码无法使用 GCC4 7 编译 struct A void f A struct B B std tuple a void f B int main f std make tuple A 因为GCC源自A利用空基类优化 然而 这导致 G