"Failed to specialize alias template" 最简单的 SFINAE 布尔条件错误

"Failed to specialize alias template" errors for the most simple SFINAE bool condition

我正在尝试实现简单的条件实现,但失败了......我试过这个:

template<class T, bool COND=0> class A
{
public:
    template< typename TT=T >
        std::enable_if_t<!COND> METHOD() const { };

    template< typename TT=T >
        std::enable_if_t<COND> METHOD() const { };
};

还有这个:

template<class T, bool COND=0> class A
{
public:
    template< typename TT=T, std::enable_if_t<!COND, int> = 0 >
        void METHOD() const { };

    template< typename TT=T, std::enable_if_t<COND, int> = 0 >
        void METHOD() const { };
};

还有很多其他的......并且总是得到“无法专门化别名模板”。我做错了什么?

编辑:使用最新的 MSVC 2022,仅 A 将触发错误。

下面的呢?

template<class T, bool COND=0> class A
{
public:
    template< bool CC=COND >
        std::enable_if_t<!CC> METHOD() const { };

    template< bool CC=COND >
        std::enable_if_t<CC> METHOD() const { };
};

我的意思是...如果您想要 enable/disable class 到 std::enable_if 的方法,您必须检查依赖于模板(类型或值)的测试方法的,而不是 class.

所以

std::enable_if_t<!COND> 

不起作用,因为 COND 是 class 的模板值;你必须使用该方法的模板值,所以你可以添加一个模板值 CC,你可以默认为 COND

template< bool CC=COND >

并检查 CC 而不是 COND

std::enable_if_t<!CC>