diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2017-10-04 20:58:52 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2017-10-04 20:58:52 +0000 |
commit | 25139006e58a7ca7b708a742af8170f399d7db63 (patch) | |
tree | 00c891e9b0f79b7660f277448b1aff51e08ef298 | |
parent | 968e56bf7f0a064fdc234a6b13246b02724a6d4a (diff) | |
download | gcc-25139006e58a7ca7b708a742af8170f399d7db63.zip gcc-25139006e58a7ca7b708a742af8170f399d7db63.tar.gz gcc-25139006e58a7ca7b708a742af8170f399d7db63.tar.bz2 |
re PR c++/78131 (Inconsistent evaluation for `constexpr` lambdas in templates between `static_assert`, `if constexpr(…)` and `constexpr` variables)
2017-10-04 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/78131
* g++.dg/cpp1z/constexpr-lambda17.C: New.
From-SVN: r253431
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1z/constexpr-lambda17.C | 30 |
2 files changed, 35 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6e8680b..b1e3edc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2017-10-04 Paolo Carlini <paolo.carlini@oracle.com> + PR c++/78131 + * g++.dg/cpp1z/constexpr-lambda17.C: New. + +2017-10-04 Paolo Carlini <paolo.carlini@oracle.com> + PR c++/78018 * g++.dg/cpp1y/lambda-generic-78018.C: New. diff --git a/gcc/testsuite/g++.dg/cpp1z/constexpr-lambda17.C b/gcc/testsuite/g++.dg/cpp1z/constexpr-lambda17.C new file mode 100644 index 0000000..44bd2b8 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1z/constexpr-lambda17.C @@ -0,0 +1,30 @@ +// PR c++/78131 +// { dg-options -std=c++17 } + +template <typename TF> +constexpr auto f(TF) +{ + return [](auto...) constexpr { return true; }; +} + +// Compiles and works as intended. +template <typename T0> +void ok_0(T0) +{ + static_assert(f([](auto x) -> decltype(x){})(T0{})); +} + +// Compiles and works as intended. +template <typename T0> +void ok_1(T0) +{ + constexpr auto a = f([](auto x) -> decltype(x){})(T0{}); + if constexpr(a) { } +} + +// Compile-time error! +template <typename T0> +void fail_0(T0) +{ + if constexpr(f([](auto x) -> decltype(x){})(T0{})) { } +} |