// PR c++/50391 // { dg-do compile { target c++11 } } namespace std { template struct integral_constant { static constexpr T value = Val; }; template struct is_abstract : integral_constant { }; template::value> struct is_destructible : integral_constant { }; template struct is_destructible : integral_constant { }; template struct is_nothrow_move_constructible : is_destructible { }; template struct decay { typedef T type; }; template struct decay { typedef T type; }; } // std template struct single { Tp elem; constexpr single(const Tp& e) : elem(e) { } single(single&& s) noexcept(std::is_nothrow_move_constructible::value) : elem(s.elem) { } }; template constexpr single::type> make_single(Tp&& x) { return single::type>(x); } class Blob; // { dg-message "forward declaration" } void foo(Blob *b) { make_single(*b); } // { dg-excess-errors "incomplete type|not a member" }