C++ C++;非类型参数包的模板专门化失败

C++ C++;非类型参数包的模板专门化失败,c++,templates,variadic-templates,non-type,C++,Templates,Variadic Templates,Non Type,我的问题可能与有关,但我认为这里没有“部分专门化的非类型参数表达式”,或者不理解这种关系 以下代码使用MSVC14编译器(CPP11)产生内部错误: 模板 结构非类型化 { }; 模板 结构是\u类型的\u非类型\u { 模板 静态constexpr bool check=false; 模板 静态constexpr bool check=true; }; coutClang接受您的代码,而GCC不接受。变量模板的部分专门化应该是正常的。您总是可以回到使用常规类模板进行实际计算的久经考验的方法 t

我的问题可能与有关,但我认为这里没有“部分专门化的非类型参数表达式”,或者不理解这种关系

以下代码使用MSVC14编译器(CPP11)产生内部错误:

模板
结构非类型化
{
};
模板
结构是\u类型的\u非类型\u
{
模板
静态constexpr bool check=false;
模板
静态constexpr bool check=true;
};

coutClang接受您的代码,而GCC不接受。变量模板的部分专门化应该是正常的。您总是可以回到使用常规类模板进行实际计算的久经考验的方法

template<typename T>
class is_NonTyped_of_type
{
    template<typename TL>
    struct check_impl : std::false_type {};

    template<T... Elmts>
    struct check_impl<NonTyped<T, Elmts...>> : std::true_type {};

public:
    template<typename TL>
    static constexpr bool check = check_impl<TL>::value;
};
模板
类是\u类型的\u非类型化\u
{
模板
结构检查\u impl:std::false\u类型{};
模板
结构检查\u impl:std::true\u类型{};
公众:
模板
静态constexpr bool check=check\u impl::value;
};

编译器没有以相同的方式处理每一种可能性,这让我感到非常困惑!谢谢,我不知道我使用的是
constexpr
而不是
struct
这一事实是造成这种奇怪行为的原因@米歇尔-是的,别名/可变温度的处理有时很奇怪。有一些语言缺陷报告可以证明这一点。最健壮的方法是像在C++03中那样使用类。然后让别名/变量以方便的方式公开结果。标准库即使在添加了新的类型特征的情况下也能做到这一点。这个注释非常有用!多谢各位@StoryTeller无论如何都不会这样做,以支持使用旧标准编译(-std=c++98)?@PasserBy-如果考虑到boost的话,会有。一个人应该始终考虑boost;)那些家伙只是以非常艰难的方式实现了这些事情,他们是英雄。
template<typename T>
class is_NonTyped_of_type
{
    template<typename TL>
    struct check_impl : std::false_type {};

    template<T... Elmts>
    struct check_impl<NonTyped<T, Elmts...>> : std::true_type {};

public:
    template<typename TL>
    static constexpr bool check = check_impl<TL>::value;
};