成员函数定义中的类型不完整

Kry*_*n S 16 c++ language-lawyer

[dcl.fct.def] p2指出:

除非删除函数,否则在函数定义的上下文中,函数定义的参数类型或返回类型不应为不完整或抽象的(可能具有cv限定)类类型。

[class.mem] P7状态:

} 在class-specifier结束时,  类被视为完全定义的对象类型(或完整类型)。该类在其完整类上下文中被视为完整类;否则,在其自身的类成员规范内,它被视为不完整。

给出以下代码:

struct S
{
  // S is incomplete
  S f() {  /* S is complete in a function body */ return S(); }
  // S is incomplete 
};
// S is complete
Run Code Online (Sandbox Code Playgroud)

一个完整的类方面值得注意的是不包括函数定义的decl说明符-SEQ,也不包括该函数的声明符,然而,每一个编译器说,这是确定的。用什么措辞可以做到这一点,因为我找不到它?

Chr*_*odd 6

引用链接中的第一项:

一个类的完整类上下文是

  • 函数体([dcl.fct.def.general]),

所以在任何方法的函数体中都被认为是一个完整的类上下文。据我所知,“函数定义的上下文”与函数体是同义词——而不是函数声明的上下文,其中不需要完整的返回类型。