簡體   English   中英

GCC 7 C++ 17 支持折疊表達式

[英]GCC 7 C++ 17 support for folding expressions

以下代碼段將在 GCC 8+ 中編譯,但在 GCC 7 中編譯失敗。

template <typename... THINGS>
struct A
{
  explicit A(THINGS *... things)
  {
    (..., [thing = things](){}());
  }
};


int main()
{
    int thing;
    const auto thingy = A{&thing};
}

神螺栓

所述的失敗是參數包沒有被擴展: parameter packs not expanded with '...'
檢查GCC 標准合規性頁面,GCC 7 中應支持折疊表達式。

除了std=c++17之外,我還需要另一個標志嗎? (我沒有看到一個)
標准還沒有完全執行嗎? (我沒有看到任何跡象表明)
我可以完成這項工作嗎,或者這只是我將不得不解決的 GCC 7 錯誤?

這是一個GCC 錯誤,最初在 8.01 版本中報告,在 8.2 版本中修復。 似乎在不使用折疊表達式時也會出現該錯誤(NathanOliver 提到的 C++11 時代的“擴展器技巧”也不起作用),因此您必須使用更長的解決方法需要擴展 lambda 捕獲中的模板參數包。 例如:

template <typename THING>
void do_it(THING* thing) {
    [thing]{}();
}

explicit A(THINGS *... things)
{
    (..., do_it(things));
}

這是一個 GCC 錯誤。 找到跟蹤的問題,在 8.2 中修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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