view gcc/testsuite/g++.dg/cpp1z/constexpr-lambda17.C @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 84e7813d76e9
children
line wrap: on
line source

// PR c++/78131
// { dg-do compile { target 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{})) { } 
}