【发布时间】:2021-11-18 06:52:02
【问题描述】:
在 C++ 中,不能在一个类中重载具有 ref-qualifier 的成员函数和不带 ref-qualifier 的成员函数。但同时也可以从父类继承一个成员函数,并在子类中重载它,如示例所示:
struct A {
void f() {}
//void f() & {} //overload error everywhere
};
struct B : A {
using A::f;
void f() & {} //ok everywhere
};
int main() {
B b;
b.f(); //ok in GCC only
}
只有在调用f 期间,Clang 才会抱怨call to member function 'f' is ambiguous。但是GCC接受程序没有任何错误,demo:https://gcc.godbolt.org/z/5zzbWcs97
哪个编译器在这里?
【问题讨论】:
-
呵呵,好奇。看起来他们为此使用了不同版本的标准。
-
我会说 gcc-bug。 (msvc 拒绝它为 clang Demo)。
标签: c++ language-lawyer overloading ref-qualifier