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