Keine Zugriffs- oder Mehrdeutigkeitsprüfung für die Funktion "Template-Member" in mehreren Basisklassen

8

Dies kompiliert und läuft gut auf Visual C ++ 2015 Update 3 RC:

%Vor%

Es gibt zwei Probleme mit diesem Code:

  1. f() ist privat, daher kann d.f<int>() nicht kompiliert werden.
  2. f() ist mehrdeutig, da es B::f() oder C::f() sein könnte.

Es gibt jedoch keine Diagnose mit /Wall und B::f() wird aufgerufen. Umkehr der Reihenfolge D erbt von bekommt C::f() aufgerufen, also denke ich, es ist nur die erste Basisklasse in der Liste verwenden.

Sowohl g ++ als auch clang haben es richtig gemacht. Fehle ich etwas oder ist das ein Fehler in Visual C ++?

    
isanae 11.06.2016, 18:14
quelle

1 Antwort

2

Dies ist ein Fehler mit Visual C ++. Ich kann es mit 2015 und 2012, aber nicht mit 2005 reproduzieren. Ich habe ein isanae 13.06.2016, 16:03

quelle