diff gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-2.C @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-pr84979-2.C	Thu Feb 13 11:34:05 2020 +0900
@@ -0,0 +1,41 @@
+// { dg-do compile { target c++11 } }
+// { dg-options "-fconcepts" }
+
+template <typename T>
+void foo1(T& t) {
+  typename T::template C<void> tcv = t;
+  typename T::template C<auto> u = tcv;
+  T::template C<auto>::f (tcv, u); // { dg-error "incomplete" }
+  (typename T::template D<auto> (t)); // { dg-error "invalid" }
+}
+
+struct T1 {
+  template <typename T> struct C {
+    C(T1&);
+    static void f(T1&, C&);
+  };
+  template <typename T> struct D {
+    D(T1&);
+  };
+};
+
+template <typename T>
+void foo2(T& t) {
+  typename T::template C<void> tcv = t;
+  typename T::template C<auto> u = tcv;
+  T::template C<auto>::f (tcv, u); // { dg-error "incomplete" }
+  T::template D<auto> (t); // { dg-error "invalid" }
+}
+
+struct T2 {
+  template <typename T> struct C {
+    C(T2&);
+    static void f(T2&, C&);
+  };
+  template <typename T> static void D(T2&);
+};
+
+void f(T1& t1, T2& t2) {
+  foo1 (t1);
+  foo2 (t2);
+}