编译器错误 C2688

“C2::fgrv”: 对 varargs 函数不支持多或虚拟继承协变返回

当函数包含变量参数时,Visual C++ 不支持协变返回类型。

若要解决此错误,请定义这些函数以便它们不使用变量参数,或者使返回值对所有虚函数都一样。

下面的示例生成 C2688:

// C2688.cpp
struct G1 {};
struct G2 {};
struct G3 : G1, G2 {};
struct G4 {};
struct G5 {};
struct G6 : G4, G5 {};
struct G7 : G3, G6 {};

struct C1 {
   virtual G4& fgrv(int,...);
};

struct C2 : C1 {
   virtual G7& fgrv(int,...);   // C2688, does not return G4&
};