cmArgumentParserTypes.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file LICENSE.rst or https://cmake.org/licensing for details. */
  3. #pragma once
  4. #include "cmConfigure.h" // IWYU pragma: keep
  5. #if defined(__SUNPRO_CC) || defined(__EDG__)
  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. using std::string::operator=;
  16. };
  17. template <typename T>
  18. struct MaybeEmpty;
  19. # if defined(__LCC__) && (__EDG_VERSION__ >= 603)
  20. template <>
  21. struct MaybeEmpty<std::vector<std::string>> : public std::vector<std::string>
  22. {
  23. using std::vector<std::string>::vector;
  24. using std::vector<std::string>::operator=;
  25. };
  26. # endif
  27. template <typename T>
  28. struct MaybeEmpty<std::vector<T>> : public std::vector<T>
  29. {
  30. using std::vector<T>::vector;
  31. using std::vector<T>::operator=;
  32. };
  33. template <typename T>
  34. struct NonEmpty;
  35. template <typename T>
  36. struct NonEmpty<std::vector<T>> : public std::vector<T>
  37. {
  38. using std::vector<T>::vector;
  39. using std::vector<T>::operator=;
  40. };
  41. template <>
  42. struct NonEmpty<std::string> : public std::string
  43. {
  44. using std::string::basic_string;
  45. using std::string::operator=;
  46. };
  47. } // namespace ArgumentParser
  48. #else
  49. namespace ArgumentParser {
  50. template <typename T>
  51. struct Maybe : public T
  52. {
  53. using T::T;
  54. using T::operator=;
  55. };
  56. template <typename T>
  57. struct MaybeEmpty : public T
  58. {
  59. using T::T;
  60. using T::operator=;
  61. };
  62. template <typename T>
  63. struct NonEmpty : public T
  64. {
  65. using T::T;
  66. using T::operator=;
  67. };
  68. } // namespace ArgumentParser
  69. #endif