编译器可以使用参数包编译c 17 lambda继承

我读到了
using function declaration,我想编译最后一个例子.这是 :

#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创建线性层次结构.

点赞