Advertisement
Guest User

Untitled

a guest
Oct 17th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.94 KB | None | 0 0
  1. // g++-9 -std=c++2a -fconcepts
  2.  
  3. #include <type_traits>
  4.  
  5. //
  6. // overloaded visitor
  7. //
  8.  
  9. template<class ... Fns>
  10. struct overloaded : public Fns ... {
  11. using Fns::operator() ... ;
  12. };
  13.  
  14. template<class ... Fns>
  15. overloaded(Fns&&...) -> overloaded< std::decay_t<Fns>...>;
  16.  
  17. //
  18. //
  19. //
  20. #include <iostream>
  21. #include <string>
  22. #include <string_view>
  23. #include <variant>
  24.  
  25. namespace concepts {
  26.  
  27. template<class T>
  28. concept arithmetic = std::is_arithmetic_v<T>;
  29.  
  30. } // concepts
  31.  
  32. auto main() -> int {
  33. using namespace std::string_literals;
  34. std::variant<int, float, std::string> var{ "hello, world"s };
  35.  
  36. auto const visitor = overloaded {
  37. [](std::string_view sv) {
  38. std::cout << "string: " << sv << "\n";
  39. },
  40. [](concepts::arithmetic x) {
  41. std::cout << "number: " << x << "\n";
  42. }
  43. };
  44.  
  45. std::visit(visitor, var); // prints: "string: hello, world\n"
  46.  
  47. var = 42;
  48.  
  49. std::visit(visitor, var); // prints: "number: 42\n"
  50.  
  51. return 0;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement