@@ -75,23 +75,26 @@ namespace usage_ok {
75
75
}
76
76
}
77
77
78
- # 1 " <std>" 1 3
79
78
namespace std {
80
79
using size_t = __SIZE_TYPE__;
81
- struct string {
82
- string ();
83
- string (const char *);
80
+ template <typename T>
81
+ struct basic_string {
82
+ basic_string ();
83
+ basic_string (const T*);
84
84
85
85
char &operator [](size_t ) const [[clang::lifetimebound]];
86
86
};
87
- string operator " " s(const char *, size_t );
88
-
89
- struct string_view {
90
- string_view ();
91
- string_view (const char *p [[clang::lifetimebound]]);
92
- string_view (const string &s [[clang::lifetimebound]]);
87
+ using string = basic_string<char >;
88
+ string operator " " s(const char *, size_t ); // expected-warning {{user-defined literal suffixes not starting with '_' are reserved}}
89
+
90
+ template <typename T>
91
+ struct basic_string_view {
92
+ basic_string_view ();
93
+ basic_string_view (const T *p);
94
+ basic_string_view (const string &s [[clang::lifetimebound]]);
93
95
};
94
- string_view operator " " sv(const char *, size_t );
96
+ using string_view = basic_string_view<char >;
97
+ string_view operator " " sv(const char *, size_t ); // expected-warning {{user-defined literal suffixes not starting with '_' are reserved}}
95
98
96
99
struct vector {
97
100
int *data ();
@@ -100,7 +103,6 @@ namespace std {
100
103
101
104
template <typename K, typename V> struct map {};
102
105
}
103
- # 68 " attr-lifetimebound.cpp" 2
104
106
105
107
using std::operator " " s;
106
108
using std::operator " " sv;
@@ -112,7 +114,7 @@ namespace p0936r0_examples {
112
114
void f () {
113
115
std::string_view sv = " hi" ;
114
116
std::string_view sv2 = sv + sv; // expected-warning {{temporary}}
115
- sv2 = sv + sv; // FIXME: can we infer that we should warn here too?
117
+ sv2 = sv + sv; // expected-warning {{object backing the pointer}}
116
118
}
117
119
118
120
struct X { int a, b; };
@@ -238,11 +240,6 @@ template <class T> T *addressof(T &arg) {
238
240
&const_cast <char &>(reinterpret_cast <const volatile char &>(arg)));
239
241
}
240
242
241
- template <typename T>
242
- struct basic_string_view {
243
- basic_string_view (const T *);
244
- };
245
-
246
243
template <class T > struct span {
247
244
template <size_t _ArrayExtent>
248
245
span (const T (&__arr)[_ArrayExtent]) noexcept ;
0 commit comments