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?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage