diff gcc/testsuite/g++.dg/cpp2a/concepts-pr67684.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-pr67684.C	Thu Feb 13 11:34:05 2020 +0900
@@ -0,0 +1,63 @@
+// { dg-do compile { target c++2a } }
+// { dg-additional-options "-fconcepts-ts" }
+
+template<class T>
+class A {
+ public:
+  template<int I, class S>
+    requires I > 0
+  friend int f1(const A<S>&);
+
+  template<int I, class S>
+  friend int f2(const A<S>&) requires I > 0;
+
+ private:
+  int x = 2;
+};
+
+template<int I, class S>
+  requires I > 0
+int f1(const A<S>& a)  { 
+  return a.x;
+} 
+
+template<int I, class S>
+int f2(const A<S>& a) requires I > 0 { 
+  return a.x;
+} 
+
+class B {
+ public:
+  template<int I>
+    requires I > 0
+  friend int f3(const B&);
+
+  template<int I>
+  friend int f4(const B&) requires I > 0;
+
+ private:
+  int x = 2;
+};
+
+template<int I>
+  requires I > 0
+int f3(const B& a) {
+  return a.x;
+}
+
+template<int I>
+int f4(const B& a) requires I > 0 {
+  return a.x;
+}
+
+int main() { 
+  A<double> a;
+  f1<2>(a);
+  f2<2>(a);
+
+  B b;
+  f3<2>(b);
+  f4<2>(b);
+
+  return 0;
+}