// The static_cast should prevent temporary elision.
// { dg-do run { target c++11 } }
int d;
struct A
{
  int i;
  A() { }
  ~A() { ++d; }
};
A f() { return A(); }
struct B
{
  A a;
  B(): a(static_cast<A&&>(f())) {}
};
int main()
{
  { B b; }
  if (d != 2)
    return -1;
}