相关疑难解决方法(0)

为什么GCC不能消除多个继承函数的歧义(但是clang可以)?

可能重复:
为什么具有相同名称但签名不同的多重继承函数不会被视为重载函数?

这无法使用g ++ 4.6.1在指定的位置进行编译:

enum Ea { Ea0 };
enum Eb { Eb0 };

struct Sa { void operator()(Ea) {} };
struct Sb { void operator()(Eb) {} };
struct Sbroken : Sa, Sb {};

struct Sworks {
    void operator()(Ea) {}
    void operator()(Eb) {}
};

int main() {
    Sworks()(Ea0);
    Sbroken()(Ea0); // g++ can't disambiguate Ea vs. Eb
}
Run Code Online (Sandbox Code Playgroud)

Clang 2.8确实编译了这段代码,这让我不确定代码是否真的有效C++.我乐观地总结出clang是对的并且g ++是错误的,但后来我做了一个小改动,使得clang有类似的错误:

enum Ea { Ea0 };
enum Eb { Eb0 };

struct Sa { void f(Ea) {} };
struct Sb …
Run Code Online (Sandbox Code Playgroud)

c++ overloading operator-overloading multiple-inheritance ambiguous

12
推荐指数
1
解决办法
799
查看次数