// I, Howard Hinnant, hereby place this code in the public domain.

// Test cast from lvalue to rvalue

// { dg-do compile { target c++11 } }
// { dg-skip-if "packed attribute missing for struct one" { "epiphany-*-*" } }

template <bool> struct sa;
template <> struct sa<true> {};

struct one   {long x[1];};
struct two   {long x[2];};

struct A {};

one foo(const A&) {return one();}
two foo(A&&)      {return two();}

int test1()
{
    A a;
    sa<sizeof(foo(a)) == 1 * sizeof(long)> t1;
    sa<sizeof(foo(static_cast<A&&>(a))) == 2 * sizeof(long)> t2;
    return 0;
}

int main()
{
    return test1();
}
