でC++ 17ラムダ継承をコンパイルできるコンパイラ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のどちらも現時点ではコンパイルできないようです。私はそれを試すことができる任意のコンパイラを持つ場所はありますか?
GCCとClangの両方の最新バージョンで何かできない場合は、他のコンパイラでも(モジュロバグ)できることはほとんどありません。独立したプロジェクトでなければ、おそらくそのうちの1つのフォークです。 –
この機能は、1か月前の作業草案に投票されました。実装には時間がかかります。 –
@TC:宣言子リストの機能が承認されてもOPの例がどのようにコンパイルされるのかまだ分かりません。 'Overloader'は基本クラスを持っているため集約ではありません。また、 'make_overloader'はジェネリックラムダを受け取ります。したがって、' Overloader'はそれを扱うために適切にテンプレート化されていますか?あなたは私を助けることができます? – AndyG