簡體   English   中英

編譯器可以使用參數包編譯c ++ 17 lambda繼承

[英]Compiler which can compile c++17 lambda inheritance with parameter pack

我讀到了使用函數聲明 ,我想編譯最后一個例子。 這是 :

#include <iostream>
template <typename... Ts>
struct Overloader : Ts... {
    using Ts::operator()...; // exposes operator() from every base
};

template <typename... T>
constexpr auto make_overloader(T&&... t) {
    return Overloader<T...>{std::forward<T>(t)...};
}

int main() {
    auto o = make_overloader([] (auto const& a) {std::cout << a;},
                             [] (float f) {std::cout << 13 << f;});
}

即使我已經知道並了解它將做什么,我也想編譯並測試它。 但是,clang-4.0和g ++ - 7.0似乎都無法編譯它。 有沒有任何編譯我可以嘗試的地方?

P0195 ,建議的語言擴展,允許:

template <typename... Ts>
struct Overloader : Ts... {
    using Ts::operator()...; // <== ill-formed without p0195
};

幾周前(2016年11月)才在Issaquah接受C ++。 gcc或clang尚未實現它並不奇怪。 給他們時間。

現在的解決方法是為Overloader創建線性層次結構。

暫無
暫無

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

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