Klassen mit Konvertierungsoperatoren sowohl für Vorlagen als auch für Nicht-Vorlagen in der Bedingung der switch-Anweisung
Das Problem entstand ursprünglich indiese Frage. Betrachten Sie den folgenden Code:
class Var
{
public:
operator int () const
{ return 0; }
template <typename T>
operator T () const
{ return T(); }
};
int main()
{
Var v;
switch (v)
{ }
}
Ohne dasoperator int() const { return 0; }
, sowohl g ++ als auch clangablehnen der Code.
Der obige Code ist jedoch mit demoperator int()
istakzeptiert von clang aberabgelehnt von g ++ mit folgendem Fehler:
main.cpp:17:14: error: default type conversion can't deduce template argument for 'template<class T> Var::operator T() const'
switch (v)
^
Welcher Compiler ist richtig?