0
ように振る舞う私は(https://wandbox.org/permlink/stCFKi0VQlF49Bxr)をコンパイルするために(もcppreference http://en.cppreference.com/w/cpp/utility/variant/visitで見つかった)次のコードを得ることができ派生クラスが集約
#include <type_traits>
#include <utility>
template <typename... Types>
struct Overload : public Types... {
using Types::operator()...;
};
template <typename... Types>
auto make_overload(Types&&... instances) {
return Overload<std::decay_t<Types>...>{std::forward<Types>(instances)...};
}
int main() {
auto overloaded = make_overload([](int) {}, [](double) {});
static_cast<void>(overloaded);
}
どのように上記のコードは、C++ 17でコンパイルしていますか? C++ではコンパイルされません。舞台裏で何が起こっていますか?また、なぜvariadic using
宣言がC++ 14で動作しないのですか?この新機能はどれですか?あなたはparameter_packで読むことができたよう
興味深い。私はこれがC++ 14でもうまくいくと思っていました。 – Curious
あなたの例を単純化することができます:C++ 17では、 'using'、' std :: decay_t'、 'std :: forward'を使わないでコンパイルする例 – max66
この[link](http://en.cppreference.com/ w/cpp/language/aggregate_initialization)は、公共の拠点は、C++以降のクラスが集約されることをもはや防止しないと述べています。この[link](http://en.cppreference.com/w/cpp/language/parameter_pack)では、C++でバリデーションの 'using'が追加されたとのことです。 – HolyBlackCat