Skip to content

Commit

Permalink
[Clang] add DR tests for D128745
Browse files Browse the repository at this point in the history
  • Loading branch information
Yuanfang Chen committed Oct 18, 2022
1 parent 6dcd15a commit 4e2a629
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 5 deletions.
11 changes: 11 additions & 0 deletions clang/test/CXX/drs/dr13xx.cpp
Expand Up @@ -457,6 +457,17 @@ Incomplete f(Incomplete) = delete; // well-formed
#endif
}

namespace dr1395 { // dr1395: 16
#if __cplusplus >= 201103L
template <typename T, typename... U> void f(T, U...);
template <typename T> void f(T);
void h(int i) {
// This is made ambiguous by dr692, but made valid again by dr1395.
f(&i);
}
#endif
}

namespace dr1399 { // dr1399: dup 1388
template<typename ...T> void f(T..., int, T...) {} // expected-note {{candidate}} expected-error 0-1{{C++11}}
void g() {
Expand Down
21 changes: 21 additions & 0 deletions clang/test/CXX/drs/dr14xx.cpp
Expand Up @@ -36,6 +36,27 @@ namespace dr1423 { // dr1423: 11
#endif
}

namespace dr1432 { // dr1432: 16
#if __cplusplus >= 201103L
template<typename T> T declval();

template <class... T>
struct common_type;

template <class T, class U>
struct common_type<T, U> {
typedef decltype(true ? declval<T>() : declval<U>()) type;
};

template <class T, class U, class... V>
struct common_type<T, U, V...> {
typedef typename common_type<typename common_type<T, U>::type, V...>::type type;
};

template struct common_type<int, double>;
#endif
}

namespace dr1443 { // dr1443: yes
struct A {
int i;
Expand Down
10 changes: 5 additions & 5 deletions clang/test/CXX/drs/dr6xx.cpp
Expand Up @@ -1079,16 +1079,16 @@ namespace dr687 { // dr687 (9 c++20, but the issue is still considered open)
}
}

namespace dr692 { // dr692: no
namespace dr692 { // dr692: 16
// Also see dr1395.

namespace temp_func_order_example2 {
template <typename... T> struct A1 {}; // expected-error 0-1{{C++11}}
template <typename U, typename... T> struct A2 {}; // expected-error 0-1{{C++11}}
template <class T1, class... U> void e1(A1<T1, U...>) = delete; // expected-error 0-2{{C++11}}
template <class T1> void e1(A1<T1>);
template <class T1, class... U> void e2(A2<T1, U...>) = delete; // expected-error 0-2{{C++11}}
template <class T1> void e2(A2<T1>);
template <typename T1, typename... U> void e1(A1<T1, U...>) = delete; // expected-error 0-2{{C++11}}
template <typename T1> void e1(A1<T1>);
template <typename T1, typename... U> void e2(A2<T1, U...>) = delete; // expected-error 0-2{{C++11}}
template <typename T1> void e2(A2<T1>);
template <typename T, typename U> void f(U, A1<U, T> *p = 0) = delete; // expected-note {{candidate}} expected-error 0-1{{C++11}}
template <typename U> int &f(U, A1<U, U> *p = 0); // expected-note {{candidate}}
template <typename T> void g(T, T = T()); // expected-note {{candidate}}
Expand Down

0 comments on commit 4e2a629

Please sign in to comment.