diff gcc/testsuite/g++.dg/cpp2a/lambda1.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/testsuite/g++.dg/cpp2a/lambda1.C	Thu Oct 25 07:37:49 2018 +0900
@@ -0,0 +1,58 @@
+// P0624R2
+// { dg-do compile { target c++11 } }
+
+#if __cplusplus >= 201402L
+#define A auto
+#else
+#define A int
+#endif
+
+void
+f1 ()
+{
+  auto greater = [](A x, A y) { return x > y; };	// { dg-message "a lambda closure type has a deleted (default constructor|copy assignment operator)" "" { target c++17_down } }
+  decltype (greater) gt;	// { dg-error "use of deleted function" "" { target c++17_down } }
+  gt = greater;			// { dg-error "use of deleted function" "" { target c++17_down } }
+}
+
+void
+f2 ()
+{
+  auto greater = [&](A x, A y) { return x > y; };	// { dg-message "a lambda closure type has a deleted (default constructor|copy assignment operator)" }
+  decltype (greater) gt;	// { dg-error "use of deleted function" }
+  gt = greater;			// { dg-error "use of deleted function" }
+}
+
+void
+f3 ()
+{
+  auto greater = [=](A x, A y) { return x > y; };	// { dg-message "a lambda closure type has a deleted (default constructor|copy assignment operator)" }
+  decltype (greater) gt;	// { dg-error "use of deleted function" }
+  gt = greater;			// { dg-error "use of deleted function" }
+}
+
+void
+f4 (int i)
+{
+  auto greater = [i](A x, A y) { return x > y; };	// { dg-message "a lambda closure type has a deleted (default constructor|copy assignment operator)" }
+  decltype (greater) gt;	// { dg-error "use of deleted function" }
+  gt = greater;			// { dg-error "use of deleted function" }
+}
+
+#if __cplusplus > 201703L
+void
+f5 ()
+{
+  auto greater = [](auto x, auto y) constexpr { return x > y; };
+  decltype (greater) gt;
+  static_assert (!gt (1, 2));
+  static_assert (gt (4, 3));
+  static_assert (!gt (3.5, 3.75));
+  static_assert (gt (3.5, 3.25));
+  gt = greater;
+  static_assert (!gt (1, 2));
+  static_assert (gt (4, 3));
+  static_assert (!gt (3.5, 3.75));
+  static_assert (gt (3.5, 3.25));
+}
+#endif