Ich habe den folgenden Codeschnipsel in 3 verschiedenen Compilern (G++, clang++, CL.exe) ausprobiert, und sie alle melden mir, dass sie die überladenen Konstruktoren nicht disambiguieren können. Ich weiß jetzt, wie ich den Aufruf des Konstruktors ändern könnte, damit er das eine oder das andere auswählt (entweder explizit machen, dass das zweite Argument ein vorzeichenloser literaler Wert ist oder es explizit casten).
Allerdings bin ich neugierig, warum der Compiler versuchen würde, zwischen Konstruktoren in erster Linie zu wählen, da einer der Konstruktoren privat ist und der Aufruf des Konstruktors in der Hauptfunktion erfolgt, die außerhalb des Anwendungsbereichs der Klasse liegen sollte.
Kann mich jemand aufklären?
class Test
{
private:
Test(unsigned int a, unsigned int *b) { }
public:
Test(unsigned int a, unsigned int b) { }
};
int main()
{
Test t1 = Test(1,0); // compiler is confused
}