尽管包含 ,但 Clang 仍拒绝 type_info 不完整

2024-02-24

我不明白为什么 Clang 拒绝以下代码:

#include <typeinfo>
#include <exception>

const char* get_name( const std::exception_ptr eptr )
{
  return eptr.__cxa_exception_type()->name();
}

int main() {}

GCC 没问题,但 Clang 抱怨type_info是一个不完整的类型:

$ g++-4.7 -std=c++0x -O3 -Wall -Wextra t.cc -o t
$ clang++-3.2 -std=c++0x -O3 -Wall -Wextra t.cc -o t
t.cc:6:37: error: member access into incomplete type 'const class type_info'
  return eptr.__cxa_exception_type()->name();
                                    ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/exception_ptr.h:144:19: note: forward declaration of
      'std::__exception_ptr::type_info'
      const class type_info*
                  ^
1 error generated.
$ 

问题:如何使用 Clang 修复它?或者我是否遗漏了一些东西,而 Clang 拒绝该代码是正确的?


感谢@HowardHinnant 的评论,我设法解决了这个问题。问题在预处理器输出中变得明显:libstdc++ 包含<exception> from <type_info>甚至在它之前declared std::type_info。这使得 Clang 做出了新的前瞻性声明std::__exception_ptr::type_info。解决方案很简单,但也是非法的:

namespace std { class type_info; }

#include <typeinfo>
#include <exception>

const char* get_name( const std::exception_ptr eptr )
{
  return eptr.__cxa_exception_type()->name();
}

int main() {}

似乎我应该检查 libstdc++ 是否已经有一个错误报告,如果没有,则创建一个。

UPDATE: Bug #56468 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56468现已修复 GCC 4.7.3+

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

尽管包含 ,但 Clang 仍拒绝 type_info 不完整 的相关文章

随机推荐

  • 如何获取jquery锚点href值

    jQuery document ready function a change status click function var status id a val alert status id return false HTML a hr
  • 如何打开/关闭 iPhone 相机闪光灯?

    如何以编程方式打开 关闭 iPhone 的 LED 相机闪光灯 import
  • Python 中的 MATLAB ks密度等效项

    我在网上查看过 但尚未找到答案或方法来计算以下内容 我正在将一些 MATLAB 代码翻译为 Python 其中在 MATLAB 中我希望使用以下函数找到核密度估计 p x ksdensity data 其中 p 是分布中 x 点的概率 Sc
  • 模板类中的 C++ 静态常量数组初始化

    我有以下模板类 template
  • 哪些注册表项决定 Outlook 配置文件

    我需要编写 VBScript 代码来检查 Outlook 是否使用 MAPI 配置文件或 RPC over HTTP S 配置文件 哪个注册表项决定相同 这在 Outlook 2013 中发生了变化 Outlook 2013 开发人员的新增
  • 如何在 Blazor 中直接更改 css(不带变量)?

    我正在使用 Blazor 的服务器端 我想改变body的CSS 在 Jquery 中我可以轻松地编写这样的代码 body css overflow y hidden 但是 通过本教程 Blazor 更改验证默认 css 类名称 https
  • $http.jsonp() 是如何工作的

    这是一个例子 json file name Jon Skeets name Bill Joy 如果这个 json 文件的获取方式为 http jsonp pathToFile then 它返回 404 没有任何问题pathToFile我已经
  • Blade 中的嵌套部分

    我正在研究 Blade 如何实现 section 但它的工作方式与我习惯的 Twig 略有不同 看来你不能将 sections嵌套在一起 Example layout blade php 基本布局文件 favicons meta conte
  • 始终触发且仅触发一次的“transitionend”事件

    我需要一个特别的transitionend like 事件 在所有转换完成后触发一次 或者如果 CSS 中没有定义转换则立即触发 这是我到目前为止所想到的 function event special transitionsComplete
  • 基于媒体查询的可选 Javascript 执行

    我试图弄清楚如何根据当前设备 媒体查询选择性地运行一段 javascript 我正在使用 Twitter Bootstrap 并且基本上有两个版本的媒体查询 media min width 980px media max width 979
  • HashMap(key: String, value: ArrayList) 返回一个 Object 而不是 ArrayList?

    我将数据存储在 HashMap 中 键 String 值 ArrayList 我遇到问题的部分声明了一个新的 ArrayList current 在 HashMap 中搜索字符串 dictCode 如果找到 则将 current 设置为返回
  • SQL aspnet_profile

    知道如何使用 SQL 从基于 UserID 的 aspnet profile 表中获取用户名字和姓氏 因为我想在 Telerik Reporting 中使用作为用户参数 示例行 名字是 George 姓氏是 Test UserID 06b2
  • 如何使 IvParameterSpec 随机但仍解密

    对于 Java 中的加密 文章位于http cwe mitre org data definitions 329 html http cwe mitre org data definitions 329 html声明初始化向量每次都应该不同
  • 将对象数组作为 TempData[] 传递给查看

    我想从后操作返回两个值到视图中RedirectToAction TempData 似乎是理想的选择 因为数据仅用于在用户保存后显示成功消息 我想在成功消息中显示用户刚刚保存的图像的小缩略图以及所保存项目的标题 目前我正在将所有数据作为new
  • 刷新 Integration Services 中的目标架构元数据

    我一直致力于一个包含 150 多个表的大型 ETL 项目 在设计过程中 我必须对几个表的目标列名称和数据类型进行重大更改 我的问题是我无法让 SSIS 查看我更改的表的新架构 所以我想知道如何让 SSIS 刷新此架构 我觉得很荒谬 没有办法
  • 我可以拥有一个 ID 以数字开头的元素吗?

    我可以有一个元素吗id以数字开头或完全是数字 例如 像这样的东西 div div 我可以有一个以 id 为数字的 div 吗 是的你可以 但使用 CSS 选择器选择 设计它会很痛苦 id仅由数字组成的值在 HTML 中完全有效 http w
  • VueJS 有没有办法从父级触发组件方法?

    我一直在搜索信息 只找到了一种从子组件发出事件的方法 然后可以在父组件中监听这些事件 有没有办法从父组件调用子方法 是的 只需在 Children 数组中找到您的组件 或者通过 ref 属性获取它 然后调用方法 ref doc https
  • 使用 subplot2grid 时如何共享x

    我是一名 Matlab 用户 最近转换为 Python 大部分 Python 技能都是我自己掌握的 但在绘图方面我遇到了困难 需要一些帮助 这就是我正在尝试做的 我需要制作一个由 3 个具有以下属性的子图组成的图形 子图布局为 311 31
  • 如何在 WP7 中以编程方式设置选定的全景项目

    我在 WP7 应用程序中使用全景控件 其中一个 PanoramaItems 将您带到另一个页面 然后您可以通过 EmailComposeTask 发送电子邮件 如果您不选择发送电子邮件并按后退按钮 全景图将返回到您上次选择的项目 但是 如果
  • 尽管包含 ,但 Clang 仍拒绝 type_info 不完整

    我不明白为什么 Clang 拒绝以下代码 include