【发布时间】:2020-11-19 11:40:54
【问题描述】:
如果我理解正确,抽象类型不能用作纯虚函数的返回类型。但是,如果使用尾随返回类型,则 gcc(但不是 clang)接受以下代码:
struct S {
virtual auto f() -> S = 0;
};
demo.
这是一个 gcc 错误,还是该语言不需要为此代码发出诊断?
【问题讨论】:
-
无论这是否格式错误,都无法覆盖该函数。
-
@eerorika 为什么会这样?如果
f返回了S*,那么它将是可覆盖的,是吗? -
@cigien 是的。问题在于返回
S按值。由于S是抽象的,因此无法实例化返回值。通过指针或引用返回S很好。 -
啊,所以问题是返回类型。我明白了,这段代码是错误的。所以问题仍然存在,编译器是否有义务对此进行诊断,还是我应该更好地了解?
-
@cigien gcc DOES NOT accept the code,它确实会生成诊断信息,至少在尝试覆盖
f()的派生类型上,无论如何:“错误:成员函数的抽象返回类型无效......因为以下虚函数在 'S' 中是纯函数...“错误:无效的抽象返回类型”
标签: c++ language-lawyer pure-virtual trailing-return-type