1 // PR c++/50391 2 // { dg-options -std=c++0x } 3 4 #include <type_traits> 5 6 template<class Tp> 7 struct single 8 { 9 Tp elem; // { dg-error "incomplete type" } 10 singlesingle11 constexpr single(const Tp& e) 12 : elem(e) { } // { dg-error "invalid field" } 13 14 single(single&& s) noexceptsingle15 noexcept(std::is_nothrow_move_constructible<Tp>::value) 16 : elem(s.elem) { } // { dg-error "invalid field|no member" } 17 }; 18 19 template<class Tp> 20 constexpr single<typename std::decay<Tp>::type> make_single(Tp && x)21 make_single(Tp&& x) 22 { 23 return single<typename std::decay<Tp>::type>(x); 24 } 25 26 class Blob; // { dg-error "forward declaration" } 27 28 void foo(Blob * b)29foo(Blob *b) 30 { 31 make_single(*b); 32 } 33 34 // { dg-prune-output "include" } 35