2 // { dg-do compile { target c++20 } }
3 // { dg-options "-Wdangling-reference" }
4 // Don't warn for std::span-like classes.
12 MySpan(T* data, std::size_t size) :
17 T& operator[](std::size_t idx) { return data_[idx]; }
24 template <typename T, std::size_t n>
25 MySpan<T const> make_my_span(T const(&x)[n])
27 return MySpan(std::begin(x), n);
30 template <typename T, std::size_t n>
31 std::span<T const> make_span(T const(&x)[n])
33 return std::span(std::begin(x), n);
39 [[maybe_unused]] int const& y1{make_my_span(x)[0]};
40 [[maybe_unused]] int const& y2{make_span(x)[0]};
42 [[maybe_unused]] int const& y3{make_my_span(T{})[0]}; // { dg-warning "dangling reference" }
43 [[maybe_unused]] int const& y4{make_span(T{})[0]}; // { dg-warning "dangling reference" }