cmArgumentParserTypes.h 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file Copyright.txt or https://cmake.org/licensing for details. */
  3. #pragma once
  4. #include "cmConfigure.h" // IWYU pragma: keep
  5. #if defined(__SUNPRO_CC)
  6. # include <string>
  7. # include <vector>
  8. namespace ArgumentParser {
  9. template <typename T>
  10. struct Maybe;
  11. template <>
  12. struct Maybe<std::string> : public std::string
  13. {
  14. using std::string::basic_string;
  15. };
  16. template <typename T>
  17. struct MaybeEmpty;
  18. template <typename T>
  19. struct MaybeEmpty<std::vector<T>> : public std::vector<T>
  20. {
  21. using std::vector<T>::vector;
  22. };
  23. template <typename T>
  24. struct NonEmpty;
  25. template <typename T>
  26. struct NonEmpty<std::vector<T>> : public std::vector<T>
  27. {
  28. using std::vector<T>::vector;
  29. };
  30. } // namespace ArgumentParser
  31. #else
  32. namespace ArgumentParser {
  33. template <typename T>
  34. struct Maybe : public T
  35. {
  36. using T::T;
  37. };
  38. template <typename T>
  39. struct MaybeEmpty : public T
  40. {
  41. using T::T;
  42. };
  43. template <typename T>
  44. struct NonEmpty : public T
  45. {
  46. using T::T;
  47. };
  48. } // namespace ArgumentParser
  49. #endif