#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() {
#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;
}
}
-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}}