c++: Some additional tests
authorNathan Sidwell <nathan@acm.org>
Mon, 2 Nov 2020 16:54:16 +0000 (08:54 -0800)
committerNathan Sidwell <nathan@acm.org>
Mon, 2 Nov 2020 16:57:33 +0000 (08:57 -0800)
I created a few tests on the modules branch that are not actually
module-related.  Here they are.

gcc/testsuite/
* g++.dg/concepts/pack-1.C: New.
* g++.dg/lookup/using53.C: Add an enum.
* g++.dg/template/error25.C: Relax 'export' error check.

gcc/testsuite/g++.dg/concepts/pack-1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/lookup/using53.C
gcc/testsuite/g++.dg/template/error25.C

diff --git a/gcc/testsuite/g++.dg/concepts/pack-1.C b/gcc/testsuite/g++.dg/concepts/pack-1.C
new file mode 100644 (file)
index 0000000..b4f2c36
--- /dev/null
@@ -0,0 +1,31 @@
+// { dg-do compile { target c++17 } }
+// { dg-options "-fconcepts" }
+
+// distilled from <concepts>, via header units
+
+template<typename _ArgTypes>
+struct is_invocable;
+
+template<typename... _Args>
+concept invocable = is_invocable<_Args...>::value;
+
+template<typename _Is>
+requires invocable<_Is>
+class BUG;
+
+template<typename _Is>
+requires invocable<_Is>
+class BUG {}; // { dg-bogus "different constraints" }
+
+template<int> struct is_invocable_NT;
+
+template<int... Ints>
+concept invocable_NT = is_invocable_NT<Ints...>::value;
+
+template<int _Is>
+requires invocable_NT<_Is>
+class BUG_NT;
+
+template<int _Is>
+requires invocable_NT<_Is>
+class BUG_NT {};
index 595612e4efe7d5b748d588e9f3981fef573ed6ae..f9e59e66cea71e2bf29dd533bca565558a84ea5e 100644 (file)
@@ -43,6 +43,7 @@ template class DT<int>;
 namespace N
 {
   int i;
+  enum bob {Q};
 }
 
 void
index 89011576e0437eefe7777fa11e31929756bb7248..77b59cd7ca2a28bb779a498317f3db815720d118 100644 (file)
@@ -12,5 +12,5 @@ extern void f2 ();
 template<>
 extern void f2<void> ();  // { dg-error "explicit template specialization cannot have a storage class" }
 
-export template<class T>  // { dg-warning "keyword 'export' not implemented" }
+export template<class T>  // { dg-warning "keyword 'export'" }
 static void* f3 ();