Почему std :: bind требует конструктора копирования? - PullRequest
0 голосов
/ 02 февраля 2019

Я реализовал некоторый класс без конструктора копирования:

class SomeClass{
public:
    SomeClass() = default;
    SomeClass(const SomeClass&) = delete;
    SomeClass& operator=(const SomeClass&) = delete;
};

Кроме того, у меня есть функция , которая будет аргументом std :: bind:

void function(SomeClass& object){
    //some code...
}

В функции main () я создаю x переменную типа SomeClass, с помощью которой я могу изменить сигнатуру функции на void ():

int main() {    
   SomeClass x;
   auto newFunc = std::bind(function,x);
}

Вопрос - почему это не работает?т.е. зачем std :: bind нужен конструктор копирования?Если бы я изменил его на:

 int main() {       
       SomeClass x;
       auto newFunc = std::bind(function,std::ref(x));
    }

Это бы сработало.

...