C++ 还有一个';如果',则启用#u;不能用于在此处禁用此声明

C++ 还有一个';如果',则启用#u;不能用于在此处禁用此声明,c++,clang,c++17,cross-platform,enable-if,C++,Clang,C++17,Cross Platform,Enable If,我尝试开发跨平台类,该类接受模板参数上的多重继承。比如: template <class M, class ... Mx> struct MultH<M, Mx...> : public M, public MultH<Mx ... > 我有测试代码: struct Base1 { Base1() = default; }; struct Base2 { Base2(std::tuple<int> off) :_

我尝试开发跨平台类,该类接受模板参数上的多重继承。比如:

template <class M, class ... Mx>
struct MultH<M, Mx...> : public M, public MultH<Mx ... >
我有测试代码:

struct Base1
{
    Base1() = default;
};

struct Base2
{
    Base2(std::tuple<int> off)
        :_off(std::get<0>(off)){}
    int _off;
};

using M1 = MultH<Base1>;
using M2 = MultH<Base2>;
auto m1 = M1(std::make_tuple(5));
auto m2 = M2(std::make_tuple(5));
struct Base1
{
Base1()=默认值;
};
结构Base2
{
Base2(标准::元组关闭)
:_off(std::get(off)){}
int_off;
};
使用M1=MultH;
使用M2=MultH;
自动m1=m1(std::make_tuple(5));
自动m2=m2(标准::make_tuple(5));
而它的编译也会引起错误

错误:在“std::uu 1::如果“;”中没有名为“type”的类型enable_if'不能用于禁用此声明

这个特定于CLang的错误,同时MSVC19处理得很好(是的,我已经分析过了)

这里有完整的代码

struct Base1
{
    Base1() = default;
};

struct Base2
{
    Base2(std::tuple<int> off)
        :_off(std::get<0>(off)){}
    int _off;
};

using M1 = MultH<Base1>;
using M2 = MultH<Base2>;
auto m1 = M1(std::make_tuple(5));
auto m2 = M2(std::make_tuple(5));