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; } 
Does not compile with clang++ 3.6.
error: cannot refer to variable template 'value' without a template argument list
Does not compile with g++ 5.2.
error: ‘template constexpr const T Value::value’ is not a function template
(1) ideone
Compiles with both clang++ and g++.
struct Something
{
    void x()
    {
        static_assert(Value::template value<int> == 0, "");
    }
};
int main() { Something{}.x(); return 0; } 
Why does (0) fail to compile?
It seems that the issue occurs if the variable template is accessed through a template parameter (in this case, TValue). Defining a type alias for TValue or using the typename keyword does not fix the issue.
What's going on here?