为什么我不需要在 C++20 中的依赖类型之前指定“typename”?

2024-03-08

这段代码在 C++20 中编译(使用 gcc 10.1),没有使用typename依赖类型之前的关键字std::vector<T>::iterator。为什么它能编译?

#include <vector>

template<typename T>
std::vector<T>::iterator // Why does this not require "typename" before it?
f() { return {}; }

int main() {
    auto fptr = &f<int>;
}

代码游乐场 https://godbolt.org/z/WhSs53


C++20 的新特性之一是打倒typename http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0634r3.html.

In C++17, you had to provide the typename keyword in nearly all dependent contexts to disambiguate a type from a value. But in C++20, this rule is relaxed a lot. In all contexts where you need to have a type, the typename keyword is no longer mandatory.

其中一种上下文是类范围内函数的返回类型,如您的示例所示。其他包括成员声明中的类型、using 声明右侧的类型、lambda 的参数声明、您要传递给的类型static_cast等。完整列表请参阅论文。


Nearly all because base-specifiers and mem-initializer-ids were always excluded, as in:

template <typename T> struct X : T::type  { }; // always ok

这没关系,因为,嗯,那needs成为一种类型。这篇论文只是将这个逻辑(好吧,它必须是一种类型,所以我们假设它是一种类型)扩展到更多必须是类型的地方。

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

为什么我不需要在 C++20 中的依赖类型之前指定“typename”? 的相关文章

  • 将数据集导出到 EXCEL

    我使用以下代码将数据库表中的字段导出到 Excel 中 我想要做的是能够编写一条 SQL 语句从多个表中检索字段并将其导出到 Excel 中 这段代码只允许我导出一张表 另外 如何显示保存提示对话框 示例代码将不胜感激 非常感谢 prote
  • WPF MVVM将DataTable绑定到DataGrid不显示数据

    我有一个简单的控件 其中包含一个 DataGrid 其中 ItemsSource 绑定到 DataTable 当我填充 DataTable 时 我可以看到 DataGrid 中添加了行 但没有显示任何数据 我没有为此 DataGrid 使用
  • ApiController 操作无法从查询字符串解析数组

    使用 Visual Studio 2012 2 MVC4 Web 应用程序 我有请求发送到我的 ApiController 如下所示 http localhost api keys ids 1 ids 2 ids 3 我的印象是以下方法应该
  • 无法更新 .mdf 数据库,因为该数据库是只读的(Windows 应用程序)

    我使用 C 创建了一个数据库 Windows 应用程序 我的应用程序在 Windows XP 上成功运行 但在 Vista 或 Windows 7 系统上无法正确执行 我的应用程序显示类似以下内容的消息 无法更新 mdf 数据库 因为该数据
  • WIX 自动生成 GUID *?

    假设我生成产品 ID 为 的 WIX XML 文件 另外 对于每个组件 GUID 我都使用
  • 使用 Thread.Sleep() 时,异步编程如何与线程一起工作?

    假设 前言 在之前的问题中 我们注意到Thread Sleep阻塞线程参见 什么时候使用Task Delay 什么时候使用Thread Sleep https stackoverflow com questions 20082221 whe
  • c#Registry to XML无效字符问题

    我在尝试从注册表创建 XML 文件时遇到问题 在我的笔记本电脑 W7 64b 上它工作正常 生成了 xml 文件 但在另一台计算机 Xp 32b 上抛出异常 System ArgumentException 十六进制值 0x00 是无效字符
  • popen2()在c中如何工作?

    我尝试使用管道 叉子和 dup 在我的程序中执行 md5sume 命令 我发现总和代码运行成功 但我无法理解某些代码行 这是我的代码 int infp outfp char buf 128 if popen2 md5sum infp out
  • Boost async_write问题

    我将展示一些代码 void wh const boost system error code ec std size t bytes transferred std cout lt lt test int main int argc cha
  • 标准头文件中的 C 编译器错误 - 未定义的 C++ 定义

    我正在尝试编译 C 程序 但收到许多错误 这些错误是在标准 C 头文件 inttypes h stdio h stat h 等 中遇到的 错误的来源是以下未定义的常量 BEGIN DECLS END DECLS BEGIN NAMESPAC
  • 如何使用包含的转换的排名来比较两个标准转换序列

    include
  • gcc 中的“假设”子句

    gcc 最新版本 4 8 4 9 是否有类似于以下的 假设 子句 assume 内置icc支持吗 例如 assume n 8 0 从 gcc 4 8 2 开始 gcc 中没有 assume 的等效项 我不知道为什么 这会非常有用 马夫索建议
  • lambda 表达式是多线程的吗?

    lambda 表达式是多线程的吗 假设当你将数学公式编写为 lambda 方法时 当你将其传递给另一个方法时 它会是多线程的吗 不是100 清楚你问的是什么 您是否想问 lambda 是否自然地在不同的线程上运行 如果是这样 则它们只是 S
  • jquery ajax“发布”调用

    我是 jQuery 和 Ajax 的新手 并且在 发布 方面遇到问题 我正在使用 jQuery Ajax post 调用将数据保存到数据库 当我尝试保存数据时 它将 null 传递给我的 C 方法 jQuery 看起来像这样 functio
  • 为什么C#不支持多重继承? [复制]

    这个问题在这里已经有答案了 可能的重复 C 应该包含多重继承吗 https stackoverflow com questions 191691 should c include multiple inheritance 为什么C 不支持多
  • Django:单击按钮加载另一个模板

    我已经在 django 项目上工作了几个星期 只是玩玩以便掌握它的窍门 我有点困惑 我现在有一个名为 home html 的模板 我想知道是否可以将另一个名为 profile html 的模板设置为 home html 模板上的链接 我有一
  • 如何并排显示 4 个三角形图案

    我无法让 4 个不同的三角形图案并排出现 这是一个控制台应用程序 这正是我试图通过使用嵌套 for 循环来实现的目标
  • 当另一个进程使用 std::fstream 写入文件时从文件读取[重复]

    这个问题在这里已经有答案了 我需要从文件中逐行读取 它是由 std getline 完成的 另一个进程的问题是一直向其附加数据 然后我需要读取新行 例如 文件一开始包含10行 我的程序读取了10行 那么我的程序应该等待 过了一会儿 另一个进
  • 在 WPF 树视图中获取 FullPath?

    如果我以编程方式创建 WPF TreeView 例如 TreeView treeView lt added in the designer TreeViewItem rootNode new TreeViewItem rootNode He
  • 使用 wmi 获取活动会话(Win32_LogonSession 还返回非活动/旧会话)

    有没有办法只显示 wmi 的活动会话 问题是 Win32 LogonSession 还显示不活动 断开连接的会话 ManagementScope scope new ManagementScope ManagementPath Defaul

随机推荐

  • Bash 布尔测试

    如果一个标志设置为 true 而另一个标志设置为 false 我将尝试运行一段代码 IE var1 true var2 false if var1 var2 then var2 something fi 由于这没有按照我预期的方式进行评估
  • 使用 AutoMapper 映射分组集合

    我有以下代码不起作用 var groupedZones this zoneDataManager GetZonesGroupedByCountry IEnumerable
  • 无法获取 Master Kerberos 主体以用作 Talend Batch 作业的续订者

    我们正在尝试使用 talend 批处理 spark 作业来访问 Kerberos 集群中的配置单元 但我们收到以下 无法获取主 Kerberos 主体以用作更新程序 错误 通过使用 talend 中的标准作业 非 Spark 我们可以毫无问
  • 如何删除 UIToolBar 上的顶部边框

    我已将 UIToolBar 色调颜色设置为某个值 并且我看到了要删除的边框线 如何去掉这个黑色边框 gt 你可以这样做 self navigationController toolbar clipsToBounds YES
  • d3 按路径制作动画组

    这是我要增强的下一个问题原问题 https stackoverflow com questions 64954518 d3 animate path by arc 64954839 所以我正在尝试的是沿着填充路径为三角形标记和文本工具提示设
  • JNI char[](char数组)的方法描述符是什么?

    我的 JAVA 类代码片段 我想使用 JNI 从我的 C 文件访问 getReg chal 方法 public char getReg chal return reg chal 我的 C 文件执行一些 jni 操作 mid env gt G
  • Facebook 登录窗口在屏幕旋转时关闭

    我已经在我的应用程序中实现了 facebook 登录过程工作正常 当我点击 Facebook 图像时 它会打开 Facebook 登录窗口 但是当我旋转模拟器时 它会关闭登录窗口 任何解决方案 将其添加到您的活动的清单文件中 android
  • Sequelize 测试 - 有时会出现验证错误

    我正在通过 Mocha Chai 对续集定义运行单元测试 如下所示 运行的主要tests jsmocha tests js Testing Dependencies expect require chai expect should req
  • 在 netfilter 挂钩中查找发送数据包的可执行文件的名称

    我正在编写一个内核模块 它使用 netfilter 挂钩来过滤 TCP 数据包 并且需要找出发送数据包的可执行文件的路径 到目前为止 我已经使用了以下方法 但它打印的名称似乎与所使用的可执行文件无关 usr lib firefox fire
  • 如何模拟 aws-sdk gem?

    我有一些代码可以使用以下命令将文件上传到 Amazon S3aws sdk宝石 显然它执行了一个 HTTP put 来上传文件 有没有一种好方法来模拟 aws sdk gem 的此功能 我尝试使用 Webmock 但是 aws sdk ge
  • 如何忽略 Git 合并中的文件?

    我正在开发一个有两个分支的 Django 网站 master and dev master是生产版本 不应直接在此处完成任何工作 所有的改变都应该来自合并dev分支 一旦被认为是稳定的 dev正如您可能猜到的那样 是开发分支 所有更改都在这
  • ViM-LaTeX、python 和 Mac OS 10.8.1 以及一个奇怪的错误

    我刚刚将我的机器更新到 Mountain Lion 10 8 1 并尝试安装 vim latex 我已经每天使用该套件大约 5 年了 但是当尝试进行全新安装并打开 tex 文件时 我收到以下错误消息 UnitCircleAnalysis t
  • 提取模式后的值

    一个初学者的问题 我有一个这样的列表 x lt c aa v12 bb x21 cc f35 xx r53 bb g 25 yy h48 nn u75 bb 26 gg m98 但还有更多行 我需要提取 bb 和 之间的内容 IE 我想 x
  • 父类可以调用子类方法吗?

    参考here https stackoverflow com questions 1385895 accesing a function via string stored in hashtable A是预编译的Java类 我也有源文件 B
  • OSMDroid 从资产文件夹加载自定义离线图块

    我想知道是否可以做这样的事情 我知道需要修改一些现有代码才能实现这一目标 但我想知道是否有人知道在哪里查看以及如何执行此操作 我在地图上的特定区域放置了一些自定义图块 作为 OSM 图块提供程序的替代品 但需要将它们存储在 assets 文
  • 将 JSON 转换为 Python 对象:如何处理 DateTime 转换?

    我有一个 C 控制台应用程序 可将 POCO 类序列化为 JSON 字符串 我使用 JSON Net 进行序列化 此应用程序中的 JSON 被转储到文件中 并由 Python 2 7 脚本读入 问题就在这里 JSON 序列化获取我的类上的所
  • 如何使用curl和PHP设置自定义请求标头键?

    我使用curl 和php 上传文件 我需要帮助来设置自定义请求标头键 例如 X Filename blahblah zip X Filesize 2677 X Filetype application zip 您必须使用curl setop
  • 如何修改 OpenXML TableCell 的前景色和背景色?

    我正在创建表格单元格 如下所示 private static TableCell GetHeaderCell string cellText var tc new TableCell new Paragraph new Run new Te
  • 如何将对象排序到存储桶中表示为有效的 JPQL 表达式?

    我想显示一个 2D 图表 其中包含给定时间跨度内处理的对象数量 映射在 JPA 中 在 30 分钟的时间内 这个数量可以扩展到大约 30k 个对象 作为一名 DBMS 我在 4 2 21 版中使用 PostgreSQL 9 4 和 JPA
  • 为什么我不需要在 C++20 中的依赖类型之前指定“typename”?

    这段代码在 C 20 中编译 使用 gcc 10 1 没有使用typename依赖类型之前的关键字std vector