mercredi 13 juin 2018

Conflicting overloads with using-declaration

#include <iostream>
struct A {
  void test() { std::cout << "A\n"; }
};
struct B : A {
  void test() { std::cout << "B\n"; }
};
struct C : B {
  using A::test;
  using B::test;
};
int main() {
  C().test();  // Is this ambiguous?
  return 0;
}

In this example, g++ 8.1.0 compiles successfully and calls test() from B.

clang++ 3.8.0 reports: error: call to member function 'test' is ambiguous.

Which is correct? If it is g++, what is the rule that picks B::test over A::test?

Aucun commentaire:

Enregistrer un commentaire