Пакет параметров шаблона C ++ автоматически добавляет & к своим параметрам - PullRequest
2 голосов
/ 19 мая 2019

Проверьте код ниже.

#include <future>

template <class F, class... Args>
void do_something(F f, Args... args) {
    using return_type = typename std::result_of<F(Args...)>::type;

    // Why below gives an error?
    std::packaged_task<return_type(Args...)> task(f, args...);
}

int func(int a, int b) {

}
int main() {
    do_something(func, 1, 2);
}

Конструктор packaged_task выдает следующую ошибку.

error: no matching function for call to 'std::packaged_task<int(int, int)>::packaged_task(int (*&)(int, int), int&, int&)'

8 |     std::packaged_task<return_type(Args...)> task(f, args...);

Я не понимаю, почему f и args стали ссылочным типом в конструкторе? Args... были int, int типами, тогда как args... просто стал int&, int&. Откуда это?

1 Ответ

1 голос
/ 19 мая 2019

packaged_task не имеет нужной подписи.

компилятор говорит, что такой функции нет.(вероятно, с кандидатами ниже)

...