GCC 和 clang 关于“typename”关键字的分歧

2023-12-04

我正在编译以下代码并且GCC似乎接受以下代码。

#include <map>

template<typename K, typename V>
class my_map {
private:
    std::map<K, V> mmap;
public:
    typedef std::map<K, V>::iterator iterator;
    typedef std::map<K, V>::const_iterator const_iterator;

    iterator begin() {return mmap.begin();}
    const_iterator begin() const {return mmap.begin();}

};

int main()
{
    my_map<int, int>::iterator whatever;
    return 0;
}

But clang抱怨失踪typename关键词。 clang 的抱怨对我来说更有意义。这是海湾合作委员会的错误吗?

Edit: 明显地,我必须在哪里以及为什么必须放置“template”和“typename”关键字? does not回答我的问题,因为我不是在问什么typename关键字是,但询问编译器的不同行为。

Edit:现在该程序已被 clang(从版本 16 开始)和 gcc 都接受。


询问编译器的不同行为。

看来 Clang 还没有实现这个 C++20 功能。这可以从编译器支持文档。这意味着 clang 是不符合标准.

C++20 feature Paper(s) GCC Clang MSVC Apple Clang
Allow lambda-capture [=, this] P0409R2 8 6 19.22* 10.0.0*
Make typename more optional P0634R3 9 19.29 (16.10)*
Pack expansion in lambda init-capture P0780R2 9 9 19.22* 11.0.3*

正如我们在上表中看到的,与“使 typename 更可选”对应的 clang 条目是空白的。

另一方面,GCC 和 MSVC 已经实现了这个 C++20 功能,因此符合标准. GCC 和 MSVC 演示


Update

截至 2022 年 3 月 11 日,clang 支持此功能版本16如下更新后的表格所示:

C++20 feature Paper(s) GCC Clang MSVC Apple Clang
Allow lambda-capture [=, this] P0409R2 8 6 19.22* 10.0.0*
Make typename more optional P0634R3 9 16 19.29 (16.10)*
Pack expansion in lambda init-capture P0780R2 9 9 19.22* 11.0.3*

该程序使用 clang trunk 进行编译.

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

GCC 和 clang 关于“typename”关键字的分歧 的相关文章

随机推荐

  • 如何按起始字符范围进行选择?

    这是我的 mySQL 查询 SELECT FROM eodList WHERE datechanged gt curdate GROUP BY symbolName ORDER BY dateChanged DESC 我如何获取所有行 例如
  • MySQL JOIN 和 COUNT 在单个查询中

    我正在尝试将两个表连接在一起并获取外键的计数 抱歉 我真的不知道如何解释自己 所以让我演示一下 我有 1 个表 订单 用于订单 包含以下字段 id f name l name credit card ETC 然后 我有一个订单中的项目的 o
  • 确定一个符号是否是第 i 个组合 nCr 的一部分

    更新 组合学和取消排名最终是我所需要的 下面的链接有很大帮助 http msdn microsoft com en us library aa289166 v vs 71 aspx http www codeproject com Arti
  • 如何为 Google Cloud Function 分配内存?

    今天我在云函数中遇到这个错误 函数被杀死 错误 超出内存限制 我的功能是基于经过身份验证的 json api 示例Firebase 示例函数 因为它工作起来就像一个魅力 我用多个路由和多个任务扩展了它 比如连接多个外部 api 将 base
  • JTable刷新不显示

    我拼命地试图说服我的JTable当我更改其数据时刷新 数据存储在全局单例中 TreeSet 我正在使用 每当TreeSets 数据被更改 会触发一个事件来刷新TableModel 出于测试目的 我将其替换为一个简单的Timer射击事件 每次
  • 无法从数据源获取单元格

    下面的代码有什么问题 UITableViewCell tableView UITableView tableView cellForRowAtIndexPath NSIndexPath indexPath NSString CellIden
  • 使用 cout 打印正确的小数位数

    我有一个清单float值 我想打印它们cout保留 2 位小数 例如 10 900 should be printed as 10 90 1 000 should be printed as 1 00 122 345 should be p
  • 我无法删除使用苹果登录的用户

    我们正在实施新的指导方针Apple 强制要求删除用户 我正在使用 firebase 进行身份验证 我正在创建一个用户帐户 这里没问题 但我无法删除使用苹果登录的用户 我收到错误 我正在使用这个api来删除 令牌撤销API 我是快速的新手 我
  • 首次未加载带有毕加索的地图标记点图像

    我正在使用自定义标记实现 android Mapview 我正在使用毕加索将图像加载到标记视图中 当我第一次启动该应用程序时 它会向我显示所有标记 但只有一个标记是使用 picasso 从数据库加载的 其他标记不会从数据库加载 它们只向我显
  • 如何对 DataGridView 列进行排序?

    我创建了一个数据表 如下所示 accTable new DataTable accTable Columns Add new DataColumn Date accTable Columns Add new DataColumn Amt a
  • 防止 JavaScript window.getSelection() 循环引用

    请参阅此演示 取决于目前仅在 Chrome 中有效的选择更改事件 http jsfiddle net fyG3H 选择一些 lorem ipsum 文本 然后聚焦文本输入 在控制台日志中 您将看到有一个 DOMSelection 对象 它的
  • 验证结束日期等于大于开始日期

    我想使用 jquery validate 检查结束日期是否大于或等于开始日期 它验证结束日期大于开始日期 但不允许结束日期等于开始日期 这是我的代码 jQuery validator addMethod greaterThan functi
  • 等待多个Promise被拒绝

    进行一些测试时 我需要等待几个承诺被拒绝 我知道我可以使用 jQuery when 来等待几个承诺得到解决 但是 一旦其中一个承诺失败 该方法就会拒绝主承诺 我知道我所有的承诺都会落空 但无论如何我还是需要等待 我该怎么做 在一种伪代码中我
  • JVM线程和Thread实例之间的关系

    我想我已经了解了操作系统线程和 JVM 线程之间的映射 首先我们有 1os Many green 的 绿色线程 然后有 1 1 映射 现在有jep 425我们有带有 M N 映射的虚拟线程 如果我错了 请纠正我 然而我对 JVM 线程和Th
  • 有关 Exchange 2010 EWS (API) 和/或 PHP 的 NuSOAP 库的帮助吗?

    在继续之前需要明确的是 不幸的是 使用 PHP 的内置 SOAP 类不是一个选项 生产服务器的 PHP 不是用它构建的 将来也不会 我正在尝试使用 EWS 来对完全外部服务器应用程序的用户进行身份验证 LDAP 身份验证已被禁止 我已通过以
  • 检查列表是否包含对象 - java

    我正在编写图像处理程序 并且列表有问题 我有一个包含积分的列表 class Point1 private int x private int y Point1 int x int y this x x this y y int getX r
  • ModuleNotFoundError:没有名为“dataclasses”的模块

    我正在尝试在 Windows 10 tensorflow gpu 2 4 0 中使用来进行对象检测 我不知道如何修复这个错误 你能帮我吗 tensorflow1 C tensorflow1 models research object de
  • 如何使用 Unix 排序命令按列中人类可读的数字文件大小进行排序?

    这个问题现已得到解答 滚动到本文末尾以获取解决方案 如果答案已经在这里 我深表歉意 但到目前为止我找到的所有答案都建议使用 h 标志或 n 标志 而这些都不适合我 我有一些来自curl 命令的输出 它为我提供了几列数据 其中一列是人类可读的
  • 使用服务帐户访问用户日历

    我的 Intranet 上有一个 php 应用程序 需要在用户的日历中添加事件 我按照以下指示进行操作https developers google com domains authentication delegation 我设置了 go
  • GCC 和 clang 关于“typename”关键字的分歧

    我正在编译以下代码并且GCC似乎接受以下代码 include