1 | // RUN: %clang_cc1 -std=c++98 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors |
2 | // RUN: %clang_cc1 -std=c++11 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors |
3 | // RUN: %clang_cc1 -std=c++14 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors |
4 | // RUN: %clang_cc1 -std=c++1z %s -verify -fexceptions -fcxx-exceptions -pedantic-errors |
5 | |
6 | #if __cplusplus < 201103L |
7 | // expected-no-diagnostics |
8 | #endif |
9 | |
10 | namespace dr1715 { // dr1715: 3.9 |
11 | #if __cplusplus >= 201103L |
12 | struct B { |
13 | template<class T> B(T, typename T::Q); |
14 | }; |
15 | |
16 | class S { |
17 | using Q = int; |
18 | template<class T> friend B::B(T, typename T::Q); |
19 | }; |
20 | |
21 | struct D : B { |
22 | using B::B; |
23 | }; |
24 | struct E : B { // expected-note 2{{candidate}} |
25 | template<class T> E(T t, typename T::Q q) : B(t, q) {} // expected-note {{'Q' is a private member}} |
26 | }; |
27 | |
28 | B b(S(), 1); |
29 | D d(S(), 2); |
30 | E e(S(), 3); // expected-error {{no match}} |
31 | #endif |
32 | } |
33 | |
34 | namespace dr1736 { // dr1736: 3.9 |
35 | #if __cplusplus >= 201103L |
36 | struct S { |
37 | template <class T> S(T t) { |
38 | struct L : S { |
39 | using S::S; |
40 | }; |
41 | typename T::type value; // expected-error {{no member}} |
42 | L l(value); // expected-note {{instantiation of}} |
43 | } |
44 | }; |
45 | struct Q { typedef int type; } q; |
46 | S s(q); // expected-note {{instantiation of}} |
47 | #endif |
48 | } |
49 | |
50 | namespace dr1756 { // dr1756: 3.7 |
51 | #if __cplusplus >= 201103L |
52 | // Direct-list-initialization of a non-class object |
53 | |
54 | int a{0}; |
55 | |
56 | struct X { operator int(); } x; |
57 | int b{x}; |
58 | #endif |
59 | } |
60 | |
61 | namespace dr1758 { // dr1758: 3.7 |
62 | #if __cplusplus >= 201103L |
63 | // Explicit conversion in copy/move list initialization |
64 | |
65 | struct X { X(); }; |
66 | struct Y { explicit operator X(); } y; |
67 | X x{y}; |
68 | |
69 | struct A { |
70 | A() {} |
71 | A(const A &) {} |
72 | }; |
73 | struct B { |
74 | operator A() { return A(); } |
75 | } b; |
76 | A a{b}; |
77 | #endif |
78 | } |
79 | |
80 | namespace dr1722 { // dr1722: 9.0 |
81 | #if __cplusplus >= 201103L |
82 | void f() { |
83 | const auto lambda = [](int x) { return x + 1; }; |
84 | // Without the DR applied, this static_assert would fail. |
85 | static_assert( |
86 | noexcept((int (*)(int))(lambda)), |
87 | "Lambda-to-function-pointer conversion is expected to be noexcept"); |
88 | } |
89 | #endif |
90 | } // namespace dr1722 |
91 | |