empty.fail.cpp 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. //===----------------------------------------------------------------------===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. // <iterator>
  9. // struct iterator_traits
  10. // {
  11. // };
  12. #include <iterator>
  13. #include "test_macros.h"
  14. struct A {};
  15. struct NotAnIteratorEmpty {};
  16. struct NotAnIteratorNoDifference
  17. {
  18. // typedef int difference_type;
  19. typedef A value_type;
  20. typedef A* pointer;
  21. typedef A& reference;
  22. typedef std::forward_iterator_tag iterator_category;
  23. };
  24. struct NotAnIteratorNoValue
  25. {
  26. typedef int difference_type;
  27. // typedef A value_type;
  28. typedef A* pointer;
  29. typedef A& reference;
  30. typedef std::forward_iterator_tag iterator_category;
  31. };
  32. struct NotAnIteratorNoPointer
  33. {
  34. typedef int difference_type;
  35. typedef A value_type;
  36. // typedef A* pointer;
  37. typedef A& reference;
  38. typedef std::forward_iterator_tag iterator_category;
  39. };
  40. struct NotAnIteratorNoReference
  41. {
  42. typedef int difference_type;
  43. typedef A value_type;
  44. typedef A* pointer;
  45. // typedef A& reference;
  46. typedef std::forward_iterator_tag iterator_category;
  47. };
  48. struct NotAnIteratorNoCategory
  49. {
  50. typedef int difference_type;
  51. typedef A value_type;
  52. typedef A* pointer;
  53. typedef A& reference;
  54. // typedef std::forward_iterator_tag iterator_category;
  55. };
  56. int main(int, char**)
  57. {
  58. {
  59. typedef std::iterator_traits<NotAnIteratorEmpty> T;
  60. typedef T::difference_type DT; // expected-error-re {{no type named 'difference_type' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  61. typedef T::value_type VT; // expected-error-re {{no type named 'value_type' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  62. typedef T::pointer PT; // expected-error-re {{no type named 'pointer' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  63. typedef T::reference RT; // expected-error-re {{no type named 'reference' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  64. typedef T::iterator_category CT; // expected-error-re {{no type named 'iterator_category' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  65. }
  66. {
  67. typedef std::iterator_traits<NotAnIteratorNoDifference> T;
  68. typedef T::difference_type DT; // expected-error-re {{no type named 'difference_type' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  69. typedef T::value_type VT; // expected-error-re {{no type named 'value_type' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  70. typedef T::pointer PT; // expected-error-re {{no type named 'pointer' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  71. typedef T::reference RT; // expected-error-re {{no type named 'reference' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  72. typedef T::iterator_category CT; // expected-error-re {{no type named 'iterator_category' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  73. }
  74. {
  75. typedef std::iterator_traits<NotAnIteratorNoValue> T;
  76. typedef T::difference_type DT; // expected-error-re {{no type named 'difference_type' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  77. typedef T::value_type VT; // expected-error-re {{no type named 'value_type' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  78. typedef T::pointer PT; // expected-error-re {{no type named 'pointer' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  79. typedef T::reference RT; // expected-error-re {{no type named 'reference' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  80. typedef T::iterator_category CT; // expected-error-re {{no type named 'iterator_category' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  81. }
  82. {
  83. typedef std::iterator_traits<NotAnIteratorNoPointer> T;
  84. typedef T::difference_type DT; // expected-error-re {{no type named 'difference_type' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  85. typedef T::value_type VT; // expected-error-re {{no type named 'value_type' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  86. typedef T::pointer PT; // expected-error-re {{no type named 'pointer' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  87. typedef T::reference RT; // expected-error-re {{no type named 'reference' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  88. typedef T::iterator_category CT; // expected-error-re {{no type named 'iterator_category' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  89. }
  90. {
  91. typedef std::iterator_traits<NotAnIteratorNoReference> T;
  92. typedef T::difference_type DT; // expected-error-re {{no type named 'difference_type' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  93. typedef T::value_type VT; // expected-error-re {{no type named 'value_type' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  94. typedef T::pointer PT; // expected-error-re {{no type named 'pointer' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  95. typedef T::reference RT; // expected-error-re {{no type named 'reference' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  96. typedef T::iterator_category CT; // expected-error-re {{no type named 'iterator_category' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  97. }
  98. {
  99. typedef std::iterator_traits<NotAnIteratorNoCategory> T;
  100. typedef T::difference_type DT; // expected-error-re {{no type named 'difference_type' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  101. typedef T::value_type VT; // expected-error-re {{no type named 'value_type' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  102. typedef T::pointer PT; // expected-error-re {{no type named 'pointer' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  103. typedef T::reference RT; // expected-error-re {{no type named 'reference' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  104. typedef T::iterator_category CT; // expected-error-re {{no type named 'iterator_category' in 'std::{{.+}}::iterator_traits<{{.+}}>}}
  105. }
  106. return 0;
  107. }