named_pair.h 790 B

12345678910111213141516171819202122232425262728
  1. //
  2. // named_pair.h
  3. // stream
  4. //
  5. // Created by Sam Jaffe on 3/30/23.
  6. //
  7. #pragma once
  8. #ifndef CONCAT
  9. #define CONCAT2(A, B) A##B
  10. #define CONCAT(A, B) CONCAT2(A, B)
  11. #endif
  12. #define NAMED_PAIR_CLASS_NAME(first, second) \
  13. CONCAT(CONCAT(CONCAT(first, _), second), _result)
  14. #define NAMED_PAIR(l, r) \
  15. template <typename L, typename R> struct NAMED_PAIR_CLASS_NAME(l, r) { \
  16. NAMED_PAIR_CLASS_NAME(l, r)(L l, R r) : l(l), r(r) {} \
  17. L l; \
  18. R r; \
  19. }
  20. namespace stream::detail {
  21. NAMED_PAIR(in, fun);
  22. NAMED_PAIR(min, max);
  23. }