I did some testing with std::packaged_task and came across this problem.
std::packaged_task<int(void)> task([]() -> int { return 1; }); task(); compiles and calling task() calls the lambda. However, this does not compile:
std::pair<int, std::packaged_task<int(void)>> pair(15, []() -> int { return 15; }); pair.second(); because
error C2664: '
std::pair<int,std::packaged_task<int (void)>>::pair(const std::pair<int,std::packaged_task<int (void)>> &)': cannot convert argument 2 from 'main::<lambda_abbe6cccb9110894d95e872872ec1296>' to 'const std::packaged_task<int (void)> &'
This, however, does compile:
std::vector<std::packaged_task<int()>> v; v.emplace_back([](){ return 1; }) Why can't I create a pair?