Advertisement
Guest User

Untitled

a guest
Jun 18th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.93 KB | None | 0 0
  1. #include <string>
  2. #include <variant>
  3. #include <stdio.h>
  4.  
  5. template <typename...Ts>
  6. struct variant_inspector : std::tuple<Ts const*...>
  7. {
  8.     variant_inspector(std::variant<Ts...> const& v)
  9.         : std::tuple<Ts const*...>{ (std::holds_alternative<Ts>(v) ? &std::get<Ts>(v) : nullptr)... }
  10.     {}
  11. };
  12.  
  13. template <typename...Ts>
  14. struct variant_inspector<Ts...>
  15.     make_variant_inspector(std::variant<Ts...> const& v)
  16. {
  17.     return variant_inspector<Ts...>{v};
  18. }
  19.  
  20.  
  21. #define CONCATENATE_DIRECT(s1, s2) s1##s2
  22. #define CONCATENATE(s1, s2) CONCATENATE_DIRECT(s1, s2)
  23. #define ANONYMOUS_VARIABLE(str) CONCATENATE(str, __LINE__)
  24. #define VARIANT_INSPECTOR(v) auto const& ANONYMOUS_VARIABLE(variant_inspector_LINE_) = make_variant_inspector(v)
  25.  
  26. auto variadic_generic_lambda = [](auto... param) {};
  27.  
  28. int main()
  29. {
  30.     std::variant<std::string,  float, int> v;
  31.  
  32.     v = 45;
  33.     VARIANT_INSPECTOR(v);
  34.  
  35.     v = "hello world";
  36.     VARIANT_INSPECTOR(v);
  37.  
  38.     return 0;
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement