转换为“const Y”不适用于 clang 上的“R&&”

2024-04-29

以下代码可以正常编译g++ (GCC) 4.7.1 20120721, 但 最近构建失败clang version 3.2 (trunk).

struct Y {};

struct X {
  operator const Y() const { return Y(); }
};

void f(Y&& y) {}

int main()
{
  f(X());
  return 0;
}

将转换运算符更改为operator Y() const足够了 使代码在两个编译器上都可以编译。

在这种情况下,哪个编译器实际上符合标准?什么是 标准实际上是这么说的吗?

按要求逐字错误:

bla.cpp:14:5: error: no viable conversion from 'X' to 'Y'
  f(X());
    ^~~
bla.cpp:1:8: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'X' to
      'const Y &' for 1st argument
struct Y {
       ^
bla.cpp:1:8: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'X' to
      'Y &&' for 1st argument
struct Y {
       ^
bla.cpp:6:3: note: candidate function
  operator const Y() const { return Y(); }
  ^
bla.cpp:10:12: note: passing argument to parameter 'y' here
void f(Y&& y) {}
       ^

EDIT:不幸的是,即使添加了过载

void f(const Y&) {}

仍然让 clang 选择右值引用重载,所以这 破坏了过去可以正常编译的现有代码,例如与标准 容器。


我相信 clang 拒绝这一点是正确的。将参数传递给f(Y&&)需要两个转换步骤,第一个是您的operator const Y()第二个是Y的复制构造函数。我认为两者都算作用户定义的转换,并且都是隐式的,这违反了隐式转换序列仅包含一个用户定义的转换的原则。

This 按const值返回的目的? https://stackoverflow.com/questions/8716330/purpose-of-returning-by-const-value包含一些关于返回 a 的语义的有趣见解const T.

嗯,如果我尝试添加一个重载void f(const Y&y)正如现在编辑的问题一样,clang 的行为非常奇怪。它仍然抱怨无法转换X to Y,甚至没有列出过载f(const Y& y)在其诊断中。但是一旦我改变了过载Y按值,即写void f(const Y y),它抱怨调用f模棱两可。

这是 XCode 4.5 的 clang 报告Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)。如果您可以使用 vanilla clang 重现此内容,您可能应该在 clang 邮件列表上报告此内容 - 当然似乎那里潜伏着一个错误某处...

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

转换为“const Y”不适用于 clang 上的“R&&” 的相关文章

  • C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

    我有一个vector
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 为什么这个函数在额外读取内存时运行速度如此之快?

    我目前正在尝试了解 x86 64 上某些循环的性能属性 特别是我的 Intel R Core TM i3 8145U CPU 2 10GHz 处理器 具体来说 在循环体内添加一条额外的指令来读取内存几乎可以使性能提高一倍 而细节并不是特别重
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • Xcode 6 本地化无法读取字符串文件

    Xcode 无法生成 xliff 本地化文件并出现错误本地化无法读取字符串文件 请检查系统日志以获取更多详细信息 有谁知道我在哪里可以找到这些日志 它是 Xcode 6 3 2 GM 但我也尝试过 6 3 1 版本 同 6 3 1 错误发生
  • 能否为一种 XAML 样式定义多个 TargetType?

    在 HTML CSS 中 您可以定义可应用于多种类型元素的样式 例如 highlight color red 可以应用于 P 和 DIV 例如 p class highlight this will be highlighted p div
  • 为什么C的数据段被分成两部分?

    所有全局初始化值都存储在 data段 即已初始化的数据段和未初始化的值存储在bss编译器将这些未初始化的值自动初始化为零bss Then why data段被分隔为 data and bss 是否有优势 或者有什么好处 C 编程语言 它是用
  • Xcode 在 Swift 2.2 和 Swift 3.0 之间切换

    自从我下载了新的 Xcode 并转换 更新了我的语法以来 Xcode 一直在上述 Swift 版本之间随机切换 我在终端中运行了 swift version 它确认 目前 我正在运行 Swift 2 2 我看到这个问题 Swift 编译器混
  • Semaphore.wait(timeout: .now()) 的目的是什么?

    看了一些苹果代码示例 我发现了这一点 func metadataOutput output AVCaptureMetadataOutput didOutput metadataObjects AVMetadataObject from co
  • “sdist”.tar.gz 发行版和 python Egg 有什么区别?

    我有一点困惑 似乎有两种不同类型的 Python 包 源代码发行版 setup py sdist 和 Egg 发行版 setup py bdist egg 两者似乎只是具有相同数据 Python 源文件 的档案 一个区别是pip最推荐的包管
  • 可扩展列表视图未扩展

    您好 需要像这样准备屏幕 这是我的可扩展列表视图的代码 适配器类 新适配器 java public class NewAdapter extends BaseExpandableListAdapter public ArrayList
  • libicuuc.so.55:无法打开共享对象文件

    当我使用 swift build 进行编译时 我的 Ubuntu 机器上出现以下错误 swift build home xxxxxxxxx Downloads swift DEVELOPMENT SNAPSHOT 2016 02 25 a
  • 是否可以使用 ES6/Babel 进行多个类导入?

    我正在开发一个反应项目 我的第一个项目 最近我重组了我的文件夹结构以使其更有意义 为了让我的生活更轻松 在我的组件文件夹中 我有一个index js文件如下所示 export from App export from Home export
  • 如何使用 compose 将 docker 卷安装到我的 docker 项目中?

    我有一个 Maven 项目 我正在 Docker 内运行 Maven 构建 但问题是 每次运行它时 它都会下载所有 Maven 依赖项 并且不会缓存任何 Maven 下载 我找到了一些解决方法 将本地 m2 文件夹挂载到 Docker 容器
  • 如何在输入数字时在数字输入字段中添加破折号?

    我正在尝试使用 javascript 将破折号插入到 html 数字字段中4th输入时输入数字 我在模糊中执行此操作 而不是在按键 按键上等中执行此操作 但是当我尝试将功能更改为on key press on key up事件它没有给出预期
  • 将耗时的进程从我的 ASP.NET 应用程序中移走

    我的 Asp net 应用程序生成动态 pdf 有时这需要一段时间 并且是一个相当繁重的过程 实际上我不希望我的用户等待pdf 只需在生成后将其发送到那里的邮件即可 所以我尝试了网络服务 我将一个 id 从数据库获取数据 和一些字符串传递给
  • AngularJS:使用控制器和 ng-repeat 重新加载 div 上的数据

    我是 Angular JS 的新手 正在学习它 我有一个 div 并在启动时使用控制器从 json 加载数据 代码如下 但我想在执行特定操作后 json 对象发生更改时再次重新加载它 索引 html DOCTYPE html PUBLIC
  • Angular:core.module 风格发生了什么?

    Tl dr 看来是core module风格不再是官方的一部分角度风格指南 https angular io guide styleguide 但它一定是最近才被删除的 导入单例服务的新最佳实践是什么 为什么删除了该样式 我刚刚读过this
  • 使 JavaScript 画布矩形可点击

    我正在创建一个简单的计算器 Here http startupsandfinance com online calculator html这是 我几乎完成了基本设计 但我对如何使按钮可点击感到困惑 一个技巧可能是为每个按钮创建一个 div
  • 如何计算给定坐标处相机可见矩形的大小? [复制]

    这个问题在这里已经有答案了 我制作了一个小型的 Three js 应用程序 它将一堆圆圈从画布的底部移动到顶部 let renderer scene light circles camera initialize animate funct
  • 是否可以要求您的用户清除您网站的 HTTP 严格传输安全 (HSTS)?

    如果您为具有较长生命周期的网站打开 HSTS 但后来决定将其关闭 例如由于第三方软件的问题 是否可以警告用户清除其 HSTS 缓存 要关闭服务器的 HSTS 请发送以下标头 Strict Transport Security max age
  • 如何修复缺少结束标签的 xml 文件

    我有一个如下所示的 xml 文件 它缺少结束标签 这是一个大约 10000 行的巨大文件 我该如何解决
  • 处理网络断开

    我正在尝试使用 HttpWebRequest 对象进行 长轮询 在我的 C 应用程序中 我使用 HttpWebRequest 发出 HTTP GET 请求 然后 我使用 beginGetResponse 等待响应 我正在使用 ThreadP
  • 转换为“const Y”不适用于 clang 上的“R&&”

    以下代码可以正常编译g GCC 4 7 1 20120721 但 最近构建失败clang version 3 2 trunk struct Y struct X operator const Y const return Y void f