1762bb9d0ad20320b9f97a841dce57ba5e8e48b07Richard Smith// RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s 28e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics 3136da1c4320156fe8924139f58fbeed2e32cc6e8Douglas Gregor 4136da1c4320156fe8924139f58fbeed2e32cc6e8Douglas Gregornamespace PR10622 { 5136da1c4320156fe8924139f58fbeed2e32cc6e8Douglas Gregor struct foo { 6136da1c4320156fe8924139f58fbeed2e32cc6e8Douglas Gregor const int first; 7136da1c4320156fe8924139f58fbeed2e32cc6e8Douglas Gregor foo(const foo&) = default; 8136da1c4320156fe8924139f58fbeed2e32cc6e8Douglas Gregor }; 9136da1c4320156fe8924139f58fbeed2e32cc6e8Douglas Gregor void find_or_insert(const foo& __obj) { 10136da1c4320156fe8924139f58fbeed2e32cc6e8Douglas Gregor foo x(__obj); 11136da1c4320156fe8924139f58fbeed2e32cc6e8Douglas Gregor } 12036e81c79805364d984af2be06be62562e08c980Douglas Gregor 13036e81c79805364d984af2be06be62562e08c980Douglas Gregor struct bar : foo { 14036e81c79805364d984af2be06be62562e08c980Douglas Gregor bar(const bar&) = default; 15036e81c79805364d984af2be06be62562e08c980Douglas Gregor }; 16036e81c79805364d984af2be06be62562e08c980Douglas Gregor void test_bar(const bar &obj) { 17036e81c79805364d984af2be06be62562e08c980Douglas Gregor bar obj2(obj); 18036e81c79805364d984af2be06be62562e08c980Douglas Gregor } 19136da1c4320156fe8924139f58fbeed2e32cc6e8Douglas Gregor} 20f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor 21f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregornamespace PR11418 { 22f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor template<typename T> 23f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor T may_throw() { 24f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor return T(); 25f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor } 26f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor 27f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor template<typename T> T &&declval() noexcept; 28f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor 29f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor struct NonPOD { 30f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor NonPOD(); 31f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor NonPOD(const NonPOD &) noexcept; 32f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor NonPOD(NonPOD &&) noexcept; 33f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor }; 34f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor 35f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor struct X { 36f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor NonPOD np = may_throw<NonPOD>(); 37f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor }; 38f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor 39f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor static_assert(noexcept(declval<X>()), "noexcept isn't working at all"); 40f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor static_assert(noexcept(X(declval<X&>())), "copy constructor can't throw"); 41f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor static_assert(noexcept(X(declval<X>())), "move constructor can't throw"); 42f48538897ccd6726e87485267495a62fdfd0b369Douglas Gregor} 43