1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s 2*67e74705SXin Li // expected-no-diagnostics 3*67e74705SXin Li 4*67e74705SXin Li namespace PR10622 { 5*67e74705SXin Li struct foo { 6*67e74705SXin Li const int first; 7*67e74705SXin Li foo(const foo&) = default; 8*67e74705SXin Li }; find_or_insert(const foo & __obj)9*67e74705SXin Li void find_or_insert(const foo& __obj) { 10*67e74705SXin Li foo x(__obj); 11*67e74705SXin Li } 12*67e74705SXin Li 13*67e74705SXin Li struct bar : foo { 14*67e74705SXin Li bar(const bar&) = default; 15*67e74705SXin Li }; test_bar(const bar & obj)16*67e74705SXin Li void test_bar(const bar &obj) { 17*67e74705SXin Li bar obj2(obj); 18*67e74705SXin Li } 19*67e74705SXin Li } 20*67e74705SXin Li 21*67e74705SXin Li namespace PR11418 { 22*67e74705SXin Li template<typename T> may_throw()23*67e74705SXin Li T may_throw() { 24*67e74705SXin Li return T(); 25*67e74705SXin Li } 26*67e74705SXin Li 27*67e74705SXin Li template<typename T> T &&declval() noexcept; 28*67e74705SXin Li 29*67e74705SXin Li struct NonPOD { 30*67e74705SXin Li NonPOD(); 31*67e74705SXin Li NonPOD(const NonPOD &) noexcept; 32*67e74705SXin Li NonPOD(NonPOD &&) noexcept; 33*67e74705SXin Li }; 34*67e74705SXin Li 35*67e74705SXin Li struct X { 36*67e74705SXin Li NonPOD np = may_throw<NonPOD>(); 37*67e74705SXin Li }; 38*67e74705SXin Li 39*67e74705SXin Li static_assert(noexcept(declval<X>()), "noexcept isn't working at all"); 40*67e74705SXin Li static_assert(noexcept(X(declval<X&>())), "copy constructor can't throw"); 41*67e74705SXin Li static_assert(noexcept(X(declval<X>())), "move constructor can't throw"); 42*67e74705SXin Li } 43