何时会出现 UB,因为 ADL 在实例化时未找到最佳重载匹配?

2024-03-17

当函数体被实例化时,依赖函数调用重载解析应该通过ADL在关联的命名空间中找到最佳匹配,否则行为是未定义的,[临时候选人]§1 https://timsong-cpp.github.io/cppwp/n4861/temp.dep.candidate#1.sentence-3

如果调用格式不正确,或者在考虑关联命名空间内的查找时会找到更好的匹配项在这些命名空间中引入的具有外部链接的所有函数声明在所有翻译单元中,不仅仅考虑在模板定义和模板实例化上下文中找到的那些声明,那么程序具有未定义的行为。

例如:

struct A {
    friend void f(A a){};
};

struct B : A {};

template <class T> 
void g (T a) {
    f(a);
}

void h(B b){
    g(b);//undefined behavior (UB)
}
 //TU2.cpp
 //...
void f(B){}

我对哪些功能可能是其中之一有两个疑问在这些命名空间中引入的具有外部链接的所有函数声明

问题1

内联友元函数是否被认为是在封闭的命名空间中引入?

Exemple:

struct A {
    friend void f(A a){};
};

struct B : A {};

template <class T> 
void g (T a) {
    f(a);
}

void h(B b){
    g(b);//undefined behavior ??
}
//TU2.cpp
//....
struct C {
   operator B();
   friend void f(B){}
   };

问题2

函数模板特化也会触发这种未定义的行为吗? (潜在实例化或实例化函数模板专业化)

Exemple:

struct A {
    friend void f(A a){};
};

struct B : A {};

template <class T> 
void g (T a) {
    f(a);
}

void h(B b){
    g(b);//undefined behavior ??
}
//TU2.cpp
//...
template <class T> void f(T){}

// optionaly also with:
// template void f(B);

None

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

何时会出现 UB,因为 ADL 在实例化时未找到最佳重载匹配? 的相关文章

随机推荐

  • Django:GenericForeignKey 中的 content_type_id

    我根据文档编写了这个类 以便能够对应用程序中具有 id 的任何内容进行投票 class Vote models Model class Meta unique together voted id voter id content type
  • take 2 $ [1..] 在 haskell 中如何工作?

    我们知道 运算符绑定的是最松散的 并且也关联到右侧 这意味着 1 应该首先被评估 因此 它不应该陷入无限循环吗 为什么它甚至完全停止了 Haskell is lazy and doesn t change that The operator
  • 适用于 C++ 的最佳开放式 XML 解析器是什么? [复制]

    这个问题在这里已经有答案了 我正在寻找一个简单 干净 正确的 XML 解析器来在我的 C 项目中使用 我应该自己写吗 怎么样RapidXML http rapidxml sourceforge net RapidXML 是一个用 C 编写的
  • C++:全局变量作为指针

    我是 C 新手 对全局变量有一个问题 我在许多示例中看 到全局变量是带有堆地址的指针 所以指针位于全局 静态变量的内存中 地址后面的数据位于堆上 对吗 相反 您可以声明存储数据的全局 无指针 变量 因此 数据存储在全局 静态变量的内存中 而
  • Grails - 将 HTML 文件作为 UTF-8 提供?

    通过 tomcat 通过 web app 提供的 html 文件的 UTF 8 被破坏 如果我直接打开文件file 它渲染得很好 如果我在运行应用程序期间查看该文件 它看起来不错 然而 当我部署为战争时 UTF 8字符出现乱码 响应的内容类
  • 如何内省地将处理程序连接到信号?

    gtk Builder http www pygtk org docs pygtk class gtkbuilder html能够识别 GUI 在 XML 文件中描述 可以发出的所有信号 并使用以下方法连接信号 http www pygtk
  • 状态栏中图标的颜色(Flutter)

    我正在使用 FLUTTER 设计指的是状态栏的黑色 并且状态栏图标的颜色必须是白色 那么如何改变 flutter 中状态栏图标的颜色呢 要改变icon白色尝试以下内容build method import package flutter s
  • 在 Rails 中清理迁移的好方法是什么?

    所以我已经在这个 Web 应用程序上工作了一年 我想将模式编译为一个迁移 这样我的文本编辑器加载速度更快 git 工作目录也不会那么混乱 搜索查找会更快 我的任何配置 数据库都不会长 4000px 迁移服务器后 请删除迁移文件 如果您想开始
  • CSV 标准 - 多个表

    我正在开发一个 python 项目 对 csv 文件进行一些分析 我知道 csv 文件没有明确定义的标准 但据我了解定义 https www rfc editor org rfc rfc4180 page 2 https www rfc e
  • 以编程方式控制 Angular-ui 手风琴的好方法是什么?

    我正在使用手风琴指令http angular ui github com bootstrap http angular ui github com bootstrap 我需要更好地控制手风琴何时打开和关闭 更准确地说 我需要手风琴组内的一个
  • ggplot2:如何通过多个变量为图表着色

    我相当确定我在某处看到了这个问题的解决方案 但由于我无法找到它 这就是我的问题 我有一些由多个变量标识的时间序列数据 我希望能够使用多个变量来绘制图表并区分颜色ggplot2 样本数据 date lt c 2016 04 01 UTC 20
  • Symfony2 跨多个应用程序共享用户

    我有多个 symfony2 应用程序 它们共享公共实体 但使用不同的数据库设置 每个数据库都有表user user role and role 问题是 我希望该用户能够登录app1通过访问www myproject com app1 log
  • 从另一个类启动 JavaFX 应用程序

    我需要从另一个 容器 类启动 javafx 应用程序并调用应用程序上的函数 但似乎没有任何方法可以获取对使用 Application launch 方法启动的应用程序的引用 这可能吗 谢谢 假设这是我们的 JavaFX 类 import j
  • 在 Erlang 中确定传入 TCP/IP 连接的 IP 地址和端口

    我想获取传入 TCP IP 连接的 IP 地址和端口号 很遗憾gen tcp s accept and recv函数只返回一个套接字 而gen udp s recv函数还返回地址信息 有没有一种简单的方法来收集属于 Erlang 中套接字的
  • 调整控制台事件的大小

    所以我认为窗口调整大小事件将通过 winproc 进行 我可能是错误的 希望获得控制台调整大小事件的通知 我想在调整大小时最大化控制台缓冲区 一旦完成 基本上将其缩小回窗口大小 从而防止由于缓冲区小于窗口而导致溢出错误 不幸的是 答案是你无
  • 如何用空字符串替换未定义

    我正在使用jsPdf 当字段留空时 pdf 上会打印 未定义 我想用空字符串替换它 我正在尝试使用 if 语句 但我没有得到它 doc text 30 190 Budget if scope currentItem JobOriginalB
  • EF/Postgresql 数据库优先方法可能吗?

    经过几个小时的搜索 我有点失望 任何人都可以确认 或不确认 在现有的 Postgres SQL 数据库中可以使用 EF 数据库优先方法 我的意思是 使用 VS EDMX degigner 吗 一些要求 我想使用 ngsql 提供程序 因为它
  • Raspberry Pi 2 上的 Google Assistant SDK

    Google Assistant SDK 是否也可以在 Pi 2 Model B ARM Cortex A7 32 位处理器 上运行 或者是 Pi 3 Model B ARM Cortex A53 64 位处理器 吗 和跑步 它在 Rasp
  • “数组参数”SQL

    我有一个表 其中包含呼叫数据记录 每个呼叫都有一个呼叫数据记录 其中一个字段是我们在查询数据库时使用的 CallerId 我们使用下面的 TSQL 来模拟数组参数 这是正确的方法还是我们已经走得太远了 ALTER PROCEDURE dbo
  • 何时会出现 UB,因为 ADL 在实例化时未找到最佳重载匹配?

    当函数体被实例化时 依赖函数调用重载解析应该通过ADL在关联的命名空间中找到最佳匹配 否则行为是未定义的 临时候选人 1 https timsong cpp github io cppwp n4861 temp dep candidate