抽象类型可以用作纯虚函数的 return 类型吗?
Can abstract types be used as the return type of a pure virtual function?
如果我没理解错的话,抽象类型不能作为纯虚函数的return类型。但是,如果使用尾随 return 类型,则 gcc(但不是 clang)接受以下代码:
struct S {
virtual auto f() -> S = 0;
};
demo.
这是一个 gcc 错误,还是该语言不需要为此代码发布诊断?
根据C++17 [class.abstract]/3,抽象类型不能用作任何函数的return类型:
An abstract class shall not be used as a parameter type, as a function return type, or as the type of an explicit conversion. Pointers and references to an abstract class can be declared. [ Example:
shape x; // error: object of abstract class
shape* p; // OK
shape f(); // error
void g(shape); // error
shape& h(shape&); // OK
— end example ]
纯虚函数似乎没有任何特殊的例外。因此,似乎答案是需要编译器为您的代码发出诊断。
如果我没理解错的话,抽象类型不能作为纯虚函数的return类型。但是,如果使用尾随 return 类型,则 gcc(但不是 clang)接受以下代码:
struct S {
virtual auto f() -> S = 0;
};
demo.
这是一个 gcc 错误,还是该语言不需要为此代码发布诊断?
根据C++17 [class.abstract]/3,抽象类型不能用作任何函数的return类型:
An abstract class shall not be used as a parameter type, as a function return type, or as the type of an explicit conversion. Pointers and references to an abstract class can be declared. [ Example:
shape x; // error: object of abstract class shape* p; // OK shape f(); // error void g(shape); // error shape& h(shape&); // OK
— end example ]
纯虚函数似乎没有任何特殊的例外。因此,似乎答案是需要编译器为您的代码发出诊断。