小编tha*_*mas的帖子

SFINAE 不适用于复制构造函数

我有一个模板类,我想要两个复制构造函数。一种用于平凡类型,另一种用于非平凡类型。以下代码有效(使用一个副本 ctor):

template <typename T>
struct  MyStruct
{
    MyStruct()
    {}
    
    MyStruct(const MyStruct& o)
    {
        std::cout << "copy ";
        foo(o);
    }
    
    template <typename U = T, typename std::enable_if_t<!std::is_trivial<U>::value, int> =0>
    void foo(const MyStruct& o)
    {
        std::cout << "Non trivial" << std::endl;
    }
    
    template <typename U = T, typename std::enable_if_t<std::is_trivial<U>::value, int> =0>
    void foo(const MyStruct& o)
    {
        std::cout << "Trivial" << std::endl;
    }
    
    MyStruct(MyStruct&& o)
    {
        std::cout << "Move" << std::endl;
    }
};

struct MyType
{
    MyType(int i){}
};

int main()
{ …
Run Code Online (Sandbox Code Playgroud)

c++ constructor sfinae

6
推荐指数
1
解决办法
105
查看次数

标签 统计

c++ ×1

constructor ×1

sfinae ×1