1 // PR c++/68782
2 // { dg-do compile { target c++11 } }
3 
4 #define assert(X) do { if (!(X)) __builtin_abort(); } while (0)
5 
6 struct holder { int& value; };
7 
from_value(int & value)8 constexpr holder from_value(int& value)
9 { return { value }; }
10 
11 struct aggr { int i; };
12 
from_aggr(aggr & a)13 constexpr holder from_aggr(aggr& a)
14 { return from_value(a.i); }
15 
main()16 int main()
17 {
18     aggr a { 42 };
19 
20     // these don't fire
21     assert( &from_value(a.i).value != nullptr );
22     assert( &a.i == &from_value(a.i).value );
23 
24     // those do
25     assert( &from_aggr(a).value != nullptr );
26     assert( &a.i == &from_aggr(a).value );
27 }
28