【发布时间】:2020-12-10 07:35:26
【问题描述】:
据我所知,以下code:
template<typename T>
struct S {
S<T>();
};
格式正确,即使构造函数声明中的<T> 是多余的。
但是,在 gcc 主干上(但不在 gcc10.2 上),使用 -std=c++20 这会产生错误:
error: expected unqualified-id before ')' token
3 | S<T>();
^
code 与 -std=c++20 在 clang 主干上编译。这是一个错误,还是 c++20 中尚未在所有编译器中实现的重大变化?
【问题讨论】:
-
“格式正确”确定吗? class.ctor/1据我所知,那里没有生产允许模板参数。
-
@n.'pronouns'm。好吧,如果它是对语言的更改,那么您将不会在最新草案中找到规则:) 如果它从来没有形成良好的格式,为什么它不是格式错误的?似乎没有编译器可以为任何版本诊断此问题。那是UB吗?
-
您有什么样的改变?
<T>从来没有被允许在那里。编译器不需要诊断未实例化模板中的错误。一旦模板被实例化,gcc 和 msvc 就会诊断它。 clang 没有,但这似乎是一个unrelated bug。 -
我收回我的话,显然我不明白它是如何工作的。
标签: c++ templates constructor language-lawyer c++20