Mercurial > hg > CbC > CbC_gcc
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