Variable template in template class - unexpected error (possible bug?)

和自甴很熟 提交于 2019-11-30 11:22:19

This is definitely a gcc and clang bug in their treatment of variable templates as dependent names. I submitted gcc 67248 and clang 24473.

As a workaround for now, both compilers support the old way of doing variable templates, namely if you added:

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

    template <typename T>
    struct variable_template_ish {
        static constexpr T value = Value::value<T>;
    };
};

then the following compiles:

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

int main() { 
    Something<Value>{}.foo();
}

I've had some headaches before when creating template class header files in c++.

Make sure you implementation of static constexpr T value{0}; is in the same header file as the declaration.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!