[英]Why can std::function<void(T)> get assigned to std::function<void(T const&)> but not std::function<void(T&)>?
[英]Why can't I convert [](auto&&…){} into a std::function<void()>?
當我嘗試編譯時:
#include <functional>
void f(std::function<void()> f)
{
}
void g()
{
f([](auto&&...){});
}
在gcc 7.3上,出現以下錯誤:
[x86-64 gcc 7.3#1]錯誤:無法將'
<lambda closure object>g()::<lambda(auto:1&&, ...)>{}
'從'g()::<lambda(auto:1&&, ...)>
'到'std::function<void()>
'
有人可以解釋為什么這是無效的c ++嗎? 還是應該提交錯誤報告? (MSVC 14接受並將其編譯為我所期望的。)
這是一個gcc錯誤 。 它解釋您的lambda如下:
[](auto&&, ...){}
因此,有一個論點,其次是C variadic。
如果將名稱添加到參數包中,則它會按預期工作:
[](auto&&... pack){}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.