Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string>
- #include <variant>
- #include <stdio.h>
- template <typename...Ts>
- struct variant_inspector : std::tuple<Ts const*...>
- {
- variant_inspector(std::variant<Ts...> const& v)
- : std::tuple<Ts const*...>{ (std::holds_alternative<Ts>(v) ? &std::get<Ts>(v) : nullptr)... }
- {}
- };
- template <typename...Ts>
- struct variant_inspector<Ts...>
- make_variant_inspector(std::variant<Ts...> const& v)
- {
- return variant_inspector<Ts...>{v};
- }
- #define CONCATENATE_DIRECT(s1, s2) s1##s2
- #define CONCATENATE(s1, s2) CONCATENATE_DIRECT(s1, s2)
- #define ANONYMOUS_VARIABLE(str) CONCATENATE(str, __LINE__)
- #define VARIANT_INSPECTOR(v) auto const& ANONYMOUS_VARIABLE(variant_inspector_LINE_) = make_variant_inspector(v)
- auto variadic_generic_lambda = [](auto... param) {};
- int main()
- {
- std::variant<std::string, float, int> v;
- v = 45;
- VARIANT_INSPECTOR(v);
- v = "hello world";
- VARIANT_INSPECTOR(v);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement