// PR c++/68782 // { dg-do compile { target c++11 } } #define assert(X) do { if (!(X)) __builtin_abort(); } while (0) struct holder { int& value; }; constexpr holder from_value(int& value) { return { value }; } struct aggr { int i; }; constexpr holder from_aggr(aggr& a) { return from_value(a.i); } int main() { aggr a { 42 }; // these don't fire assert( &from_value(a.i).value != nullptr ); assert( &a.i == &from_value(a.i).value ); // those do assert( &from_aggr(a).value != nullptr ); assert( &a.i == &from_aggr(a).value ); }