diff --git a/clang/test/SemaCXX/attr-lifetimebound.cpp b/clang/test/SemaCXX/attr-lifetimebound.cpp index 0fb997a567108..bdc5817191737 100644 --- a/clang/test/SemaCXX/attr-lifetimebound.cpp +++ b/clang/test/SemaCXX/attr-lifetimebound.cpp @@ -75,23 +75,26 @@ namespace usage_ok { } } -# 1 "" 1 3 namespace std { using size_t = __SIZE_TYPE__; - struct string { - string(); - string(const char*); + template + struct basic_string { + basic_string(); + basic_string(const T*); char &operator[](size_t) const [[clang::lifetimebound]]; }; - string operator""s(const char *, size_t); - - struct string_view { - string_view(); - string_view(const char *p [[clang::lifetimebound]]); - string_view(const string &s [[clang::lifetimebound]]); + using string = basic_string; + string operator""s(const char *, size_t); // expected-warning {{user-defined literal suffixes not starting with '_' are reserved}} + + template + struct basic_string_view { + basic_string_view(); + basic_string_view(const T *p); + basic_string_view(const string &s [[clang::lifetimebound]]); }; - string_view operator""sv(const char *, size_t); + using string_view = basic_string_view; + string_view operator""sv(const char *, size_t); // expected-warning {{user-defined literal suffixes not starting with '_' are reserved}} struct vector { int *data(); @@ -100,7 +103,6 @@ namespace std { template struct map {}; } -# 68 "attr-lifetimebound.cpp" 2 using std::operator""s; using std::operator""sv; @@ -112,7 +114,7 @@ namespace p0936r0_examples { void f() { std::string_view sv = "hi"; std::string_view sv2 = sv + sv; // expected-warning {{temporary}} - sv2 = sv + sv; // FIXME: can we infer that we should warn here too? + sv2 = sv + sv; // expected-warning {{object backing the pointer}} } struct X { int a, b; }; @@ -238,11 +240,6 @@ template T *addressof(T &arg) { &const_cast(reinterpret_cast(arg))); } -template -struct basic_string_view { - basic_string_view(const T *); -}; - template struct span { template span(const T (&__arr)[_ArrayExtent]) noexcept;