嵌套类和 ADL

2024-01-09

这是代码:

namespace Namespace
{
    struct L0
    {
        enum SomeEnum
        {
            EnumVal
        };

        struct L1
        {
            friend void f(SomeEnum)
            {
                std::cout << "f()" << std::endl;
            }
        };

        friend void g(SomeEnum)
        {
            std::cout << "g()" << std::endl;
        }
    };
}

int main()
{
    f(Namespace::L0::EnumVal); // error: f not defined
    g(Namespace::L0::EnumVal); // good
}

这里的想法是让编译器通过ADL找到f()和g()。

但是,此代码无法使用 gcc 或 clang 进行编译。不过,类似的代码似乎在 MSVC 下编译得很好。

也许我错过了一些东西,但我真的不明白代码有什么问题,以及它是否完全错误。如果有人能阐明这一点,那就太好了。

附言。新年快乐:)


SomeEnum 不是 L1 的成员,因此 ADL 找不到 L1 中定义的函数。

我相信,这就是您正在寻找的报价:

首先在类或类模板 X 中的友元声明中声明的名称将成为 X 的最内层封闭命名空间的成员,但无法进行查找(考虑 X 的参数相关查找除外),除非命名空间范围内的匹配声明是提供 - 有关详细信息,请参阅名称空间。

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

嵌套类和 ADL 的相关文章

  • 枚举 EMF 时丢失文本

    我在列举发票 emf http www mediafire com kdjwvvo7odyvwa6并将其复制到另一个但文本丢失了 令人惊讶的是 当我将其输出到窗口时 它绘制得非常完美 int CALLBACK EnhMetaFileProc
  • 使用 C# 和反射打印完整的对象图

    我有一个复杂的对象 class A int Field1 int field2 property ClassB ClassB property classC classC etc etc 我想使用反射打印完整的对象图 有什么好的代码吗 一种
  • 如何从 webmethod 向 AJAX 调用返回异常?

    我回来了List
  • Debug.WriteLine() 未命中

    我正在调试 Windows 服务 通过点击F5在 Visual Studio 2010 中 使用以下代码 In 程序 cs file static void Main if Environment UserInteractive We ar
  • 如何在Qt3D中优化点云渲染

    我正在尝试使用 Qt3D 显示大型点云 20M pts 我第一次发现这个图书馆https github com MASKOR Qt3DPointcloudRenderer https github com MASKOR Qt3DPointc
  • 用于轻松动态反射的 C# 库

    是否有任何库 例如开源项目等 可以更轻松地使用复杂的反射 例如动态创建对象或类 检查实例等 Thanks 有一个LinFu http www codeproject com KB cs LinFuPart1 aspx可用的库除了反射之外还可
  • C++在子类中调用虚方法

    我有以下课程 class A protected A inner public virtual void doSomething 0 class B public A void doSomething if inner NULL inner
  • Apple IOS 上的 C# 应用程序 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有基于 C Net 的应用程序 有什么方法可以在 Apple IOS 上运行这些应用程序吗 我没有资
  • 如何使用 Linq to Sql 修剪值?

    在数据库中 我有一个名为 联系人 的表 名字和其他此类字符串字段设计为使用 Char 数据类型 不是我的数据库设计 我的对象 Contact 映射到属性中的字符串类型 如果我想做一个简单的测试 通过 id 检索 Contact 对象 我会这
  • 为什么这段代码不会产生编译错误?

    template
  • 获取RFC返回的嵌套结构的值?

    我是 C 新手 我有 rfc 它以嵌套结构的形式从 SAP 系统返回数据 但是当我使用以下方式获取该数据时 IrfcTable table rfc getTable exporting parameter et customer 它仅返回第
  • 为什么.net中的数组只实现IEnumerable而不实现IEnumerable

    我正在实现自己的 ArrayList 类 当我意识到这一点时 我感到很惊讶 public System Collections Generic IEnumerator
  • 为什么 g++ 在编译的二进制文件中存储类名?

    我注意到如果我跑strings在我编译的程序上g 输出包含它使用的各种类的名称 该程序是用 O3并且没有 g or p 并且当我剥离二进制文件时 类名仍然存在 我想知道为什么有必要g 将此信息存储在二进制文件中 出现的类名似乎都是使用虚函数
  • 初始化二维数组时出现分段错误

    我已经检查过我的代码是否正确地划分了内存空间 但是一旦我尝试将 2D 数组初始化为某些值 然后对这些值求和 我就会在 2x2 数组上收到分段错误 我想最终将我的代码扩展到更大的数组 但我什至无法让它在这里工作 我知道有很多关于 malloc
  • 比较 C# 中的对象属性[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动
  • 通过开源 PCL 使用 API 查看 3D 点云

    我使用 ToF 飞行时间 相机来获取 XYZ 格式的深度数据 为了实现 3D 点云的可视化目的 我想使用开源 PCL 提供的 API 网址为http pointclouds org documentation tutorials pcl v
  • 错误:C# 尝试读取或写入受保护的内存

    我很难纠正这个错误 该应用程序在 4 台不同的机器上进行了测试 在其中 3 台上运行良好 但一台 Vista PC 在尝试通过 WebBrowser1 打开页面时出现此错误 解决这个问题的任何帮助对我都会非常有帮助 System Acces
  • 在 C# 中设置风扇速度

    我知道以前有人问过这个问题 但我似乎无法让它发挥作用 我已调用以下内容 using System Management using System Management Instrumentation using System Runtime
  • Ruby on Rails 中的枚举

    我是一名 C 程序员 我正在研究 ruby on Rails 但我可能在心态或其他方面遇到了一些麻烦 我有一个投票对象 该对象可以是赞成 中立或反对 我通常会让投票对象有一个像这样的字段 private VoteEnum voteEnum
  • 如何将 IDispatch* 放入托管代码中

    我一直在考虑尝试使用 C 编写一个实现 OPOS 服务对象的 COM 对象 我已经使用自动化和 MFC 在 C 中完成了它 这并不太困难 所以我坚持尝试将其转换为一种方法 我将排除界面中的其他方法 因为它们很简单 或者我希望如此 id 6

随机推荐

  • 如何以特定格式对数组中的奇数和偶数进行排序

    我有一个像这样的向量 seq vector lt c 3 12 5 9 11 8 4 6 7 11 15 3 9 10 12 2 我想按奇数降序排列它们 然后按偶数升序排列它们 上述 seq vector 的输出将是 new seq vec
  • 使用 Laravel 迁移将默认值设置为 NULL

    我正在迁移中的表中添加一个字段 我希望允许该字段为 NULL 但我也希望它默认为 NULL 我在默认方法中放置什么 我担心把 NULL in 将尝试放置一串NULL我显然不想要 请帮忙 Schema table item categorie
  • 无法更改复合类型,因为列正在使用它

    我正在尝试更改表中的列当前正在使用的复合类型的属性 我正在使用命令 ALTER TYPE typeName ALTER ATTRIBUTE attributeName SET DATA TYPE text 不幸的是 我收到错误 ERROR
  • 在项目中使用 gradle 插件,其依赖项也使用相同的插件

    我是 gradle 新手 从 Maven 离开 现在我有一个问题 我有一个 gradle 构建 我想在其中使用com bmuschko nexus插入 但我的项目依赖于另一个项目 我也想在其中使用com bmuschko nexus plu
  • Bonobo Git 服务器 - HTTP 错误 500.19 - 代码:0x80070021

    安装后访问系统时出现此错误 操作系统 Windows 2012 R2 我遇到了同样的问题 我相信 IIS 不知何故丢失了 MVC 框架的注册 通过以下方式重做注册 Windows 8 Windows Server 2012 Windows
  • 低功耗蓝牙 Android - 在后台搜索

    我想知道是否可以在后台检查是否有人进入或离开信标区域 例如 在 iOS 中 您可以使用以下方法didEnterRegion or didExitRegion从后台发送通知 是否有任何本地可能性或有人有解决方法 Android根本没有任何 原
  • 从 javascript 堆栈跟踪中查找 Java 实际堆栈跟踪

    我们实现了一种从 GWT 客户端记录服务器异常的通用机制 当然 其中一些是意外的异常 例如 NPE 因此我们在日志中得到了这些堆栈跟踪 摘录 java lang Throwable One or more exceptions caught
  • 使用 Android 的新指纹 API 供多个用户使用

    我们正在 Android 上创建一个时间戳应用程序 理想情况下这将使用指纹来识别用户 在一个组织中可能有大约 150 个不同的用户 指纹 API 是否允许多个用户 或者目前仅适用于设备所有者 如果这只适用于当前用户 是否有其他可用的 API
  • Jinja2 过滤器将自定义标记转换为 html

    拥有自动转义属性 我想保持这种方式 我希望用户能够输入一些自定义标记 以便有机会格式化文本 例如 s s 将被翻译成 strong strong 我相信正确的方法是编写自定义 Jinja2 过滤器 但以下方法不起作用 app templat
  • 异步实际上是如何工作的......?

    我一直在研究大量的多线程 回调 调度队列 同步和异步方式 我研究得越多 得到的就越多困惑和沮丧以至于我觉得我似乎永远无法理解它 请有人能引导我朝着正确的方向开始 到目前为止我发现的大部分信息都是关于什么是做什么和优势的东西 我什么真正想知道
  • 将文本字符串解析为 F# 代码

    如何获取应该是 F 代码的文本字符串 并将其解析为 F 代码 以在屏幕上打印结果 我猜测这个问题可以通过 NET 中的一个功能来解决 因此可以通过 F 本身或 C 来完成 这可能以什么方式解决tryfsharp org http www t
  • Numpy 多维子集

    我花了很长时间努力寻找这个问题的答案 但没有找到任何完全符合要求的答案 我有一个多维 numpy 数组 其中包含数据 在我的例子中是 3 维 和另一个数组 2 维 其中包含有关我想要沿原始数组的最后一个维度的值的信息 例如 这是一个说明问题
  • 将路径保存在字符串中

    private static final String BasePath home rafael pesquisa ImageSimilarity 我正在开发一个图像比较程序 我从某处找到了这行代码 然而 在上述情况下 路径是为 Linux
  • POWERSHELL - 添加列 + 更新几行

    我是 PowerShell 新手 我目前正在尝试合并两个不同的 csv 一个有 7 列和 31 行 另一个有3列 大约10行 他们只有 PC 列是共同的 其余的我必须添加列 我尝试过几种操作 但没有成功 这是 powershell 控制台上
  • 如何在 C#winform 中向 ListView 添加列表项?

    我有一个对象列表 我想将这些项目添加到 ListView 中 我试图按行添加每个列表项 但格式非常糟糕 它应该采用正确的表类型格式 List
  • 有没有办法使用 JavaScript 获取当前时间(以纳秒为单位)?

    所以 我知道我可以使用 JavaScript 获取当前时间 以毫秒为单位 但是 是否有可能以纳秒为单位获取当前时间 使用以下方法在大多数浏览器中实现微秒级精度 window performance now 也可以看看 https devel
  • 如何访问异步获取函数的值? [复制]

    这个问题在这里已经有答案了 我想在另一个函数中使用获取的值 我对JS真的很陌生 所以直到现在我尝试了 this setState 和函数的返回值 async fetchData const url http localhost 8080 c
  • onCheckedChanged 多次触发,带有复选框的 Listview

    我有一个带有复选框的 ListView Oncheckedchanged 当用户选中 取消选中列表视图上的项目时调用 OncheckedChanged 当用户通过单击列表项时再次调用onItemClick 这是一个已知的问题 如何区分事件
  • 来自命令行的 ms 语音

    有没有办法从命令行使用 MS Speech 实用程序 我可以在 Mac 上执行此操作 但在 Windows XP 上找不到任何参考 我对这个主题的 2 美分 命令行俏皮话 在 Win 上使用PowerShell exe PowerShell
  • 嵌套类和 ADL

    这是代码 namespace Namespace struct L0 enum SomeEnum EnumVal struct L1 friend void f SomeEnum std cout lt lt f lt lt std end