mercredi 6 décembre 2017

How to delete copy/move instantiation of variadic template constructor

Suppose this is my class:

#include<utility>
#include<type_traits>

template<typename T>
class MyClass {
    T v;
public:
    template<typename...Ts>
    MyClass(Ts&&...args) :v{ std::forward<Ts>(args)... } {}

    MyClass(MyClass const&) = default;
    MyClass(MyClass &&) = default;
};

int main(){
    MyClass<int> mc;
    MyClass<int> mc2{ mc }; // error: cannot convert from 'MyClass<int>' to 'int'
}

How to correctly prevent the variadic template constructor from instantiating a copy/move constructor?

Aucun commentaire:

Enregistrer un commentaire