Variable Vorlage in Vorlagenklasse - unerwarteter Fehler (möglicher Fehler?)

Having:

struct Value
{
    template<class T>
    static constexpr T value{0};
};

(0) ideone

template<typename TValue>
struct Something
{
    void x()
    {
        static_assert(TValue::template value<int> == 0, "");
    }
};

int main() { Something<Value>{}.x(); return 0; } 

Kompiliert nicht mit clang ++ 3.6.

error: kann nicht auf die variable Vorlage 'value' ohne eine Vorlagenargumentliste verweisen

Kompiliert nicht mit g ++ 5.2.

Fehler: 'template constexpr const T Wert :: Wert' ist keine Funktionsvorlage

(1) ideone

Kompiliert mit clang ++ und g ++.

struct Something
{
    void x()
    {
        static_assert(Value::template value<int> == 0, "");
    }
};

int main() { Something{}.x(); return 0; } 

Warum tut (0) nicht kompilieren?

Es scheint, dass das Problem auftritt, wenn dasvariable templateuf @ wird über einen Vorlagenparameter zugegriffen (in diesem FallTValue). Typalias für @ definierTValue oder mit demtypenameas Schlüsselwort @ behebt das Problem nicht.

Was ist denn hier los

Antworten auf die Frage(4)

Ihre Antwort auf die Frage