cmArgumentParserTypes.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. template <>
  31. struct NonEmpty<std::string> : public std::string
  32. {
  33. using std::string::basic_string;
  34. };
  35. } // namespace ArgumentParser
  36. #else
  37. namespace ArgumentParser {
  38. template <typename T>
  39. struct Maybe : public T
  40. {
  41. using T::T;
  42. };
  43. template <typename T>
  44. struct MaybeEmpty : public T
  45. {
  46. using T::T;
  47. };
  48. template <typename T>
  49. struct NonEmpty : public T
  50. {
  51. using T::T;
  52. };
  53. } // namespace ArgumentParser
  54. #endif