Наличие:
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; }
-
Не компилируется с clang++ 3.6.
error: не может ссылаться на переменную template 'value' без списка аргументов шаблона
-
Не компилируется с g++ 5.2.
error: 'template constexpr const T Значение:: значение не является шаблоном функции
(1) ideone
Компилируется как с clang++, так и с g++.
struct Something
{
void x()
{
static_assert(Value::template value<int> == 0, "");
}
};
int main() { Something{}.x(); return 0; }
Почему (0) не удается скомпилировать?
Кажется, что проблема возникает, если к шаблону переменной обращаются через параметр шаблона (в этом случае TValue
). Определение псевдонима типа для TValue
или использование ключевого слова typename
не устраняет проблему.
Что здесь происходит?