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 demtypename
as Schlüsselwort @ behebt das Problem nicht.
Was ist denn hier los