2 // { dg-do compile { target c++11 } }
3 // { dg-options "-Wdangling-reference" }
5 struct Plane { unsigned int bytesused; };
7 // Passes a reference through. Does not change lifetime.
11 Ref(const T & i) : i_(i) {}
15 struct FrameMetadata {
16 Ref<const Plane> planes() const { return p_; }
21 void bar(const Plane & meta);
22 void foo(const FrameMetadata & fm)
24 const Plane & meta = fm.planes().inner();
26 const Plane & meta2 = FrameMetadata().planes().inner(); // { dg-warning "dangling reference" }
31 const S& self () { return *this; }
34 const S& r1 = s.self();
35 const S& r2 = S().self(); // { dg-warning "dangling reference" }
42 Ref<const D> get() const { return d; }
47 const C& get() const { return c; }
53 const B& get() const { return b; }
59 const auto& d1 = a.get().get().get().inner();
61 const auto& d2 = A().get().get().get().inner(); // { dg-warning "dangling reference" }
63 const auto& d3 = A().b.get().get().inner(); // { dg-warning "dangling reference" }
65 const auto& d4 = a.b.get().get().inner();
67 const auto& d5 = a.b.c.get().inner();
69 const auto& d6 = A().b.c.get().inner(); // { dg-warning "dangling reference" }
73 const auto& d7 = r.inner();
75 const auto& d8 = Ref<Plane>(p).inner();