C++ 类名注入

2024-04-30

根据标准[class]/2:

…类名也被插入到类本身的范围中;这被称为注入类名.…

此外,[basic.scope.pdecl]/9:

声明要点注入类名(第 9 条)紧跟在类定义的左大括号之后。

最后,[basic.lookup.classref]/3 及其示例:

如果 unqualified-id 是 ~类型名称, the 类型名称被查找……

struct A { };
struct B {
    struct A { };
    void f(::A* a);
};
void B::f(::A* a) {
    a-> ~ A(); // OK: lookup in *a finds the injected-class-name
}

到目前为止,我们可以收集到:

  1. 在类 A 的范围内,存在一个名称 A。
  2. 该名称在类 A 的定义大括号的开头声明。
  3. 该名称命名了一种类型。

如果以上正确的话为什么下面的代码无法编译(在 MSVC2015 中):

struct inj
{};

typedef struct inj::inj inj2;

错误信息

错误 C2039“{ctor}”:不是“inj”的成员

似乎与标准不一致:

注意:例如,构造函数不是详细类型说明符中可接受的查找结果,因此构造函数不会就地使用 注入的类名。 ——尾注


由于以下代码在其他编译器中编译运行正确,因此在MSVC2015中是一个bug。

#include <boost/type_index.hpp>
#include <iostream>

struct inj
{
    int g;
};

typedef struct inj::inj inj2;

int main()
{

    inj2 ii;
    std::cout << boost::typeindex::type_id_with_cvr<decltype(ii)>().pretty_name() << '\n';
}

UPDATE: 已报告为错误 https://connect.microsoft.com/VisualStudio/feedback/details/1618414.

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

C++ 类名注入 的相关文章

随机推荐

  • 为什么在没有声明的情况下不能从 .cpp 文件中获取模板函数的完全特化?

    以下代码不会生成编译 链接器错误 警告 A h include
  • scipy 中稀疏正定线性系统推荐的直接求解器?

    如果 scipy sparse 文档中对此有清楚的解释 我很抱歉 使用 scipy 时 您建议使用什么函数来求解稀疏正定线性方程组 我想使用直接方法 并且希望对列重新排序 以便在系数矩阵的 Cholesky 分解中尽可能保持稀疏性 理想情况
  • 如何创建 sqlalchemy 到 json

    我有一个 sqlalchemy 结果 labels session query LabelsData LabelsData id LabelsData name LabelsData color filter LabelsData dele
  • 从云调度程序调用 Google 云函数时出现权限被拒绝错误

    我正在尝试调用 Google 云函数 该函数是由云调度程序触发的 Http 但每当我尝试运行云调度程序时 它总是显示权限被拒绝错误 httpRequest status 403 insertId 14igacagbanzk3b jsonPa
  • 测试 SMTP 服务器通过 C# 运行

    如何在不发送消息的情况下通过 C 测试 SMTP 是否启动并运行 我当然可以尝试 try send email to email protected cdn cgi l email protection catch log smtp is
  • 您使用什么 cscope 参考卡? [关闭]

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

    如何在 OS X 中显示带圆角的 NSVisualEffectView 我添加 NSVisualEffectView 的代码 let visualEffectView NSVisualEffectView frame NSMakeRect
  • Pandas 从重采样中检索添加行的索引

    我有一个缺少行的数据框 我对其进行插值和重新采样 我想知道是否有办法在重新采样时获取添加到数据帧的行的索引 这就是我创建 重新采样 插入数据帧的方式 import numpy as np import pandas as pd from d
  • 使用 write.table 时避免在列名和行名中使用引号 [重复]

    这个问题在这里已经有答案了 我在名为 data txt 的文件中有以下数据 pid 1 2 4 15 18 20 1 at 100 200 89 189 299 788 2 at 8 78 33 89 90 99 3 xt 300 45 5
  • 嵌套 ListView、StreamBuilder 和子集合

    我正在尝试创建一个嵌套的 ListView 但不知道是否可以在嵌套视图中组合 2 个流构建器 因为它不起作用 在带有子集合查询的第二个 StreamBuilder 中 似乎没有返回数据 我不明白为什么 当我对文档 ID 进行硬编码时 我没有
  • 通过组合字符串将不同的行归为一行

    我有一个这样的数据集 Column1 Column2 1 A 1 B 1 C 2 D 2 E 2 F 2 G 3 H 3 I 我想将它合并成这样的东西 Column1 Column2 1 A B C 2 D E F G 3 H I 是否可以
  • 如何在 Matplotlib 中指定类似箭头的线条样式?

    我想在 Matplotlib 中显示一组 xy 数据 以指示特定路径 理想情况下 将修改线条样式以使用类似箭头的补丁 我创建了一个模型 如下所示 使用 Omnigraphsketcher 看来我应该能够覆盖常见的之一linestyle声明
  • Azure DevOps Rest Api 是否返回正确数量的拉取请求?

    我们正在尝试收集有关拉取请求的信息 以便为我们的部门建立某些指标 完成拉取请求需要多长时间 Azure DevOps 提供了一个 API 来查询很多东西 包括拉取请求 我在这里查了一下用法 https learn microsoft com
  • 页面加载后自动执行.on()函数

    I use container on click contentEffects 使一些 jquery 代码在 ajax 调用后再次工作 不过 我希望 on 函数可以在页面加载后立即自动执行 并且无需click事件 那可能吗 请看一下我的网站
  • 如何使用 PHP 在文本区域中显示 Word 文档?

    我试图使用 com 类测试代码来显示 Word 文件 但我似乎无法得到答案并且仍在搜索 我遇到错误 有时程序根本不显示任何内容 请给我一些想法 我正在使用 PHP 4 如果站点托管在装有 Word 的 Windows 计算机上 您可以使用
  • 使用Core Data中的Cascade删除关系对象

    我希望使用核心数据执行一些简单的删除 但仅需要对此的一些建议 我有一个包含交易 名称 事件和日期实体的模型 该交易与其他每个实体都有链接 在应用程序中 当用户将信息添加到文本字段时 该信息会保存到 4 个选项卡的表格视图控制器中 第一个选项
  • 伽玛分布拟合误差

    对于分类任务 我想将伽玛分布拟合到两对数据 类内和类之间的距离人口 这是为了确定理论错误接受率和错误拒绝率 The fit Scipy returns puzzles me tough A plot of the data is below
  • 实现批量记录获取

    在程序开始时 我需要将数据从 MS Access 数据库 mdb 读取到下拉控件中 这样做是为了每当用户在该控件中键入内容时 应用程序都可以自动完成 不管怎样 从数据库中读取数据花了很长时间 所以我想我应该实现批量行获取 这是我的代码 CS
  • 有没有办法从 Symfony 应用程序中的 url 中删除 '/web' 而不将 'web' 目录的内容移动到根目录?

    我在使用 Symfony 创建应用程序时遇到一个问题 即 url 中出现 web 我找到了一种方法来摆脱这个问题 将 web 目录的内容移动到根目录 但我认为这不是一个好的开发实践 必须有其他方法 谁能告诉我是否还有其他方法可以做到这一点
  • C++ 类名注入

    根据标准 class 2 类名也被插入到类本身的范围中 这被称为注入类名 此外 basic scope pdecl 9 声明要点注入类名 第 9 条 紧跟在类定义的左大括号之后 最后 basic lookup classref 3 及其示例