2

如果我理解正确,抽象类型不能用作纯虚函数的返回类型。但是,如果使用尾随返回类型,则 gcc(但不是 clang)接受以下代码:

struct S {
    virtual auto f() -> S = 0; 
};

演示

这是一个 gcc 错误,还是该语言不需要为此代码发布诊断?

4

1 回答 1

2

根据 C++17 [class.abstract]/3,抽象类型不能用作任何函数的返回类型:

抽象类不得用作参数类型、函数返回类型或显式转换的类型。可以声明对抽象类的指针和引用。[示例:

shape x;           // error: object of abstract class
shape* p;          // OK
shape f();         // error
void g(shape);     // error
shape& h(shape&);  // OK

结束示例]

纯虚函数似乎没有任何特殊的例外。因此,答案似乎是编译器需要为您的代码发出诊断。

于 2020-07-29T19:42:30.153 回答