Poniższy kod przy próbie kompilacji w GCC wyrzuca błąd "call of overloaded 'BaseB(Derived&)' is ambiguous". W Visualu natomiast kompilator milczy, a program zdaje się wywoływać konstruktor kopiujący BaseB(const BaseB &) zamiast zdefiniowanego jawnie BaseB(BaseA & baseA). Ma ktoś pomysł jak przekonać Visuala, żeby informował o takich błędach? Kod:
#include "pch.h"
#include <iostream>
class BaseA
{
public:
BaseA()
{
std::cout << "BaseA()" << std::endl;
}
};
class BaseB
{
public:
BaseB(BaseA & baseA) :
baseA(baseA)
{
std::cout << "BaseB()" << std::endl;
}
BaseA & baseA;
};
class Derived :
public BaseA,
public BaseB
{
public:
Derived() :
BaseB(*this)
{
}
};
int main()
{
Derived d;
return 0;
}
Wynik działania programu to BaseA(), zamiast spodziewanego BaseA() BaseB().
Wynik pracy kompilatora (jakby wszystko było w porządku):
1>------ Rebuild All started: Project: Test, Configuration: Debug Win32 ------
1>pch.cpp
1>Test.cpp
1>Test.vcxproj -> <SolutionPath>\Debug\Test.exe
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
Edit: Znalazłem identyczny opis problemu sprzed roku, jednak nie ma on rozwiązania (link).