Представьте меня есть тип:Почему в этой ситуации не работает std :: function?
struct my_type
{
double operator()(int a)
{
return 3.1415;
}
};
Тогда я хотел бы, чтобы обернуть его в std::function
. Рассмотрим два различных подхода:
my_type m_t;
std::function<double(int)> f(std::move(m_t));
std::cout << f(4) << std::endl;
Все работает хорошо, как я ожидал, первые цифры PI печатаются. Тогда второй подход:
std::function<double(int)> ff(my_type());
std::cout << ff(4) << std::endl;
Мне кажется, что этот код абсолютно же, как и первый. rvalue
передается в качестве аргумента для обертки function
. Но проблема в том, что второй код не компилируется! Я действительно не знаю, почему так.