In the following program struct B inherits B(int) deleted constructor from its base A, and also defines additional constructor B(int&&). Then an object of B is created with B b(1):
struct A {
A() {}
A(int) = delete;
};
struct B : A {
using A::A;
B(int&&) {}
};
int main() {
B b(1);
}
If both constructors B(int) and B(int&&) had been defined directly in B the result would have been the ambiguity of constructor selection. And in this example, GCC prints a
call of overloaded 'B(int)' is ambiguous`
error as well.
But Clang prefers the constructor declared in B over the one inherited from A. Demo: https://gcc.godbolt.org/z/dnErEenE5
Which compiler is right here?