簡體   English   中英

為什么我不能將[](auto &amp;&amp;…){}轉換為std :: function <void()> ?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM