首页 > 后端开发 > C++ > 为什么 C 20 类模板构造函数中的冗余模板参数列表现在出现错误?

为什么 C 20 类模板构造函数中的冗余模板参数列表现在出现错误?

DDD
发布: 2024-11-19 06:32:02
原创
489 人浏览过

Why Are Redundant Template Parameter Lists in C  20 Class Template Constructors Now an Error?

C 20 中的类模板构造函数中的冗余模板参数列表

在 C 中,在类模板中声明构造函数的语法发生了变化在 C 20 中。以前,以下形式的代码被认为是格式良好的:

template<typename T>
struct S {
    S<T>();
};
登录后复制

尽管 存在冗余,但构造函数声明中的模板参数,此代码编译成功。然而,在启用了 -std=c 20 标志的 C 20 中,GCC trunk 现在会报告以下代码的错误:

error: expected unqualified-id before ')' token
3 |     S<T>();
^
登录后复制

虽然在 GCC10.2 或带有 -std= 的 Clang 中不会遇到此错误c 20,它源于 C 20 中引入的根本性更改。

根据 C 20 兼容性部分,不再使用 simple-template-id 作为构造函数或析构函数的 declarator-id有效的。此举旨在消除潜在的容易出错的冗余。

C 20 的 [class.ctor] 部分中的新措辞指定对于类模板内的成员声明中的构造函数,应使用注入的类名称:

template<typename T>
struct S {
    S();  // Use injected-class-name
};
登录后复制

在此示例中,S 表示内部类模板的注入类名称。因此,冗余的被删除。模板参数已从构造函数声明中删除。

以上是为什么 C 20 类模板构造函数中的冗余模板参数列表现在出现错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板