非静态成员函数的 decltype 格式是否错误?

2023-11-25

我不确定是否完全理解[dcl.type]/4.3:

对于一个表达式e,表示的类型decltype(e)定义如下:

  • [...]
  • (4.3) 否则,如果e是不带括号的 id 表达式或不带括号的类成员访问,decltype(e)是命名实体的类型e。如果没有这样的实体,或者if e命名一组重载函数,程序格式错误;
  • [...]

对我来说,强调的部分都适用于id-表达式 and 类成员访问, right?

使用我最喜欢的编译器,我得到以下结果。

✓ 被编译器接受

namespace N { void f() {} }
using type = decltype(N::f);
type* pf = N::f;

我觉得可以吧;N::f是一个不带括号的 id 表达式,并且不命名一组重载函数。

✗ 被编译器拒绝

namespace N { void f() {} void f(int) {} }
using type = decltype(N::f); // error: decltype cannot resolve address of overloaded function
type* pf = N::f;

Ok; N::f确实命名了一组重载函数。

✗ 被编译器拒绝

struct S { void f(){} };
using type = decltype(S::f); // error: invalid use of non-static member function 'void S::f()'
type* pf = &S::f;

Hum? S::f会命名一组重载函数吗?


总而言之,就是我的理解[dcl.type]/4.3只是不好? gcc trunk 错了吗?两个都?没有任何?卡穆洛克斯?


原因很简单,就是使用S::f仅限于班级成员。

[expr.prim.id]

2表示非静态数据成员的 id 表达式或 类的非静态成员函数只能使用:

  • 作为类成员访问的一部分,其中对象表达式引用成员的类或从该类派生的类,或者
  • 形成指向成员的指针 ([expr.unary.op]),或者
  • 如果该 id 表达式表示非静态数据成员并且它出现在未计算的操作数中。

最后一个项目符号与您的代码相关,仅适用于非静态数据成员。没有提供功能。

我只能推测为什么不允许这样做虽然我之前问过这个问题.

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

非静态成员函数的 decltype 格式是否错误? 的相关文章

  • 未提供参数时如何指定 C# System.Commandline 行为?

    在我的控制台应用程序中 当未提供控制台参数时 将执行我指定列表 在本例中为参数 3 的任何处理程序 调用该处理程序时 布尔参数设置为 false 但对我来说 根本不调用它更有意义 如何防止这种情况发生并显示帮助文本 using System
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • ClickOnce 应用程序错误:部署和应用程序没有匹配的安全区域

    我在 IE 中使用 FireFox 和 Chrome 的 ClickOnce 应用程序时遇到问题 它工作正常 异常的详细信息是 PLATFORM VERSION INFO Windows 6 1 7600 0 Win32NT Common
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • 单个对象的 Monogame XNA 变换矩阵?

    我读过一些解释 XNA Monogame 变换矩阵的教程 问题是这些矩阵应用于 SpriteBatch Begin matrix 这意味着所有 Draw 代码都将被转换 如何将变换矩阵应用于单个可绘制对象 就我而言 我想转换滚动背景 使其自
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 是否有实用的理由使用“if (0 == p)”而不是“if (!p)”?

    我倾向于使用逻辑非运算符来编写 if 语句 if p some code 我周围的一些人倾向于使用显式比较 因此代码如下所示 if FOO p some code 其中 FOO 是其中之一false FALSE 0 0 0 NULL etc
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • 使用管道时,如果子进程数量大于处理器数量,进程是否会被阻塞?

    当子进程数量很大时 我的程序停止运行 我不知道问题是什么 但我猜子进程在运行时以某种方式被阻止 下面是该程序的主要工作流程 void function int process num int i initial variables for
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • 调用堆栈中的“外部代码”是什么意思?

    我在 Visual Studio 中调用一个方法 并尝试通过检查调用堆栈来调试它 其中一些行标记为 外部代码 这到底是什么意思 方法来自 dll已被处决 外部代码 意味着该dll没有可用的调试信息 你能做的就是在Call Stack窗口中单
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • Oracle Data Provider for .NET 不支持 Oracle 19.0.48.0.0

    我们刚刚升级到 Oracle 19c 19 3 0 所有应用程序都停止工作并出现以下错误消息 Oracle Data Provider for NET 不支持 Oracle 19 0 48 0 0 我将 Oracle ManagedData

随机推荐

  • 在字符串末尾使用 JavaScript 的 parseInt

    我知道 parseInt myString 10 Never forget the radix 如果字符串中的第一个字符是数字 将返回一个数字 但是如果我有一个像 column5 这样的字符串并且想要将其增加到下一个 column6 我该如
  • C 中宏参数的类型检查

    是否可以对 define 宏的参数进行类型检查 例如 typedef enum REG16 A REG16 B REG16 C REG16 define read 16 reg16 read register 16u reg16 asser
  • 如何使用 Durandal 导航下拉菜单?

    我刚刚开始与 Durandal 合作 所有部分都已就位 并且正在使用热毛巾模板来加快速度 让我困惑的一件事是如何创建比按钮组更复杂的分层导航系统 这就是我想要的结果 ABCA1 B1 C1A2 B2 C2 A B 和 C 是顶级菜单 没有附
  • 提取字符串中的链接并返回对象数组

    我从服务器收到一个字符串 该字符串包含文本和链接 主要以 http https 和 www 开头 很少有不同 但如果不同也没关系 Example 简单文本 简单文本 简单文本 domain ext subdir 再次文本 文本 youban
  • 如何将 proto3 与 Hadoop/Spark 结合使用?

    我有几个依赖于的 proto 文件syntax proto3 我还有一个 Maven 项目 用于构建 Hadoop Spark 作业 Hadoop 2 7 1 和 Spark 1 5 2 我想在 Hadoop Spark 中生成数据 然后根
  • Visual Studio 2012 - 缺少所需文件“tracker.exe”

    我尝试编译源代码哭泣引擎3我总是收到以下错误消息 Error 1 error Required file tracker exe is missing C Program Files x86 MSBuild Microsoft Cpp v4
  • 如何在 Bokeh 0.13 中制作和弦图?

    以前版本的 Bokeh 似乎有和弦图 https docs bokeh org en 0 12 4 docs gallery chord chart html 但不是最新版本 https docs bokeh org en latest d
  • ACTION_SEND 用于发送短信

    我想打开本机应用程序来发送短信 但应该已经有电话号码 我发现 ACTION SEND 但当我调用我的函数时 它返回错误 04 26 11 59 15 991 ERROR AndroidRuntime 20198 android conten
  • 挥发性及其有害影响

    我是一名嵌入式开发人员 在使用 I O 端口时使用 volatile 关键字 但我的项目经理建议使用 volatile 关键字是有害的 并且有很多缺点 但我发现在大多数情况下 volatile 在嵌入式编程中很有用 据我所知 挥发性在内核代
  • 如何在 Linux 上构建 Mac 软件包? (BOM文件问题)

    我正在经营一家为人们制作电子邮件信纸的公司 我们有一些 Mac 用户当前必须下载 zip 文件并手动将其复制到他们的邮件信纸目录中 我希望自动化该过程 并允许 Mac 用户直接下载一个包 该包将自动复制这些文件 我已经使用 PackageM
  • 是否有海龟图形使用的关键事件名称的完整列表?

    玩耍的同时蟒蛇的乌龟模块 我用了一些关键事件正如官方文件所述 turtle onkey fun key 参数 fun 没有参数或 None 的函数 key 字符串 键 例如 a 或键符号 例如 space Now the interesti
  • 在命令行(终端)上使用 R 脚本的最佳方式是什么?

    使用 R 脚本从命令行进行简单绘图非常方便 然而 从 bash 脚本运行 R 一点也不方便 理想的可能是这样的 path to R or usr bin env R 但我没能让其中任何一个发挥作用 另一种选择是将脚本纯粹保留在 R 中 例如
  • 如何使用 R 从 dropbox 下载文件(任何形式)

    I tried download file https www dropbox com s r3asyvybozbizrm Himalayas jpg destfile 1 jpg method auto 但它返回该页面的 HTML 源代码
  • mongodb是否具有关系型数据库中的trigger、procedure等属性?

    正如标题所示 包括 Map Reduce 框架 如果我想在插入记录之前触发一个事件来运行一致性检查或安全操作 我该如何使用 MongoDB 来做到这一点 MongoDB 不支持触 发器 但人们已经围绕它们创建了解决方案 主要使用 oplog
  • Java中超类引用无法调用子类方法

    我对Java的多态性有一个基本的怀疑 我已将下面的代码写入一个名为 AnimalTestDrive java 的文件中 根据我的说法 下面的代码应该特别适用于粗体行 但不幸的是它不是 你能解释一下为什么吗 我给出了以下错误 class Do
  • 在 Chart.js 段中嵌入唯一标识符?

    我想通过允许用户双击切片进行向下钻取来使饼图具有交互性 我相信做到这一点的方法是在画布上创建一个 onclick 处理程序 并使用getSegmentsAtEvent 以确定单击了哪个切片 调用返回的段数据getSegmentsAtEven
  • 缓慢的“属性获取”和“函数”过程

    我遇到了一个令人讨厌的 VBA 错误 它使得Property Get过程调用真的很慢 这很可能是由于最近的 Office 更新 我有 Office365 造成的 它仅影响 32 位 CPU 上的 Excel The bug 考虑一个名为Cl
  • 变更数据捕获或变更跟踪 - 与传统审计跟踪表相同吗?

    在我深入研究 Microsoft 文档的深渊之前 我想知道有变更数据捕获和变更跟踪经验的人是否知道其中之一或两者是否可以用来取代传统的 审计追踪表副本 真实 table 原始表的所有字段 加上日期 时间 用户 ID 和 DML 动作字段 插
  • 您能推荐 PHP 性能分析工具吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 谁能推荐一些有用的 PHP
  • 非静态成员函数的 decltype 格式是否错误?

    我不确定是否完全理解 dcl type 4 3 对于一个表达式e 表示的类型decltype e 定义如下 4 3 否则 如果e是不带括号的 id 表达式或不带括号的类成员访问 decltype e 是命名实体的类型e 如果没有这样的实体