// PR c++/51222 // { dg-do compile { target c++11 } } template struct add_rref { typedef T&& type; }; template<> struct add_rref { typedef void type; }; template typename add_rref::type declval(); template())) > auto f(int) -> char; template auto f(...) -> char(&)[2]; template auto g(int) -> char; template auto g(...) -> char(&)[2]; template auto f2(int) -> decltype(::delete ::new T(declval()), char()); template auto f2(...) -> char(&)[2]; template auto g2(int) -> decltype(::delete ::new T(), char()); template auto g2(...) -> char(&)[2]; struct C { }; struct A { virtual ~A() = 0; }; struct D1 { D1() = delete; }; struct D2 { ~D2() = delete; }; static_assert(sizeof(g(0)) == 2, "Ouch"); static_assert(sizeof(g(0)) == 2, "Ouch"); static_assert(sizeof(g(0)) == 2, "Ouch"); static_assert(sizeof(g(0)) == 2, "Ouch"); static_assert(sizeof(g(0)) == 2, "Ouch"); static_assert(sizeof(g(0)) == 2, "Ouch"); static_assert(sizeof(g(0)) == 2, "Ouch"); static_assert(sizeof(g(0)) == 2, "Ouch"); static_assert(sizeof(g(0)) == 2, "Ouch"); static_assert(sizeof(g(0)) == 2, "Ouch"); static_assert(sizeof(f(0)) == 2, "Ouch"); static_assert(sizeof(f(0)) == 2, "Ouch"); //static_assert(sizeof(f(0)) == 2, "Ouch"); static_assert(sizeof(f(0)) == 2, "Ouch"); static_assert(sizeof(f(0)) == 2, "Ouch"); static_assert(sizeof(f(0)) == 2, "Ouch"); static_assert(sizeof(f(0)) == 2, "Ouch"); static_assert(sizeof(f(0)) == 2, "Ouch"); static_assert(sizeof(f(0)) == 2, "Ouch"); static_assert(sizeof(f(0)) == 2, "Ouch"); static_assert(sizeof(f(0)) == 2, "Ouch"); static_assert(sizeof(g2(0)) == 2, "Ouch"); static_assert(sizeof(g2(0)) == 2, "Ouch"); static_assert(sizeof(g2(0)) == 2, "Ouch"); static_assert(sizeof(g2(0)) == 2, "Ouch"); static_assert(sizeof(g2(0)) == 2, "Ouch"); static_assert(sizeof(g2(0)) == 2, "Ouch"); static_assert(sizeof(g2(0)) == 2, "Ouch"); static_assert(sizeof(g2(0)) == 2, "Ouch"); static_assert(sizeof(g2(0)) == 2, "Ouch"); static_assert(sizeof(g2(0)) == 2, "Ouch"); static_assert(sizeof(f2(0)) == 2, "Ouch"); static_assert(sizeof(f2(0)) == 2, "Ouch"); //static_assert(sizeof(f2(0)) == 2, "Ouch"); static_assert(sizeof(f2(0)) == 2, "Ouch"); static_assert(sizeof(f2(0)) == 2, "Ouch"); static_assert(sizeof(f2(0)) == 2, "Ouch"); static_assert(sizeof(f2(0)) == 2, "Ouch"); static_assert(sizeof(f2(0)) == 2, "Ouch"); static_assert(sizeof(f2(0)) == 2, "Ouch"); static_assert(sizeof(f2(0)) == 2, "Ouch"); static_assert(sizeof(f2(0)) == 2, "Ouch");