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)8constexpr holder from_value(int& value) 9 { return { value }; } 10 11 struct aggr { int i; }; 12 from_aggr(aggr & a)13constexpr holder from_aggr(aggr& a) 14 { return from_value(a.i); } 15 main()16int 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