blob: cf637f6c3d7dd8aca583d96a0087553562e8d801 [file] [log] [blame]
// PR c++/85149
// { dg-do run { target c++17 } }
template <typename T> struct is_void { static constexpr bool value = false; };
template <> struct is_void<void> { static constexpr bool value = true; };
template<typename S, typename T>
constexpr decltype(auto) pipeline(S source, T target)
{
return [=](auto... args)
{
if constexpr(false
&& is_void<decltype(source(args...))>::value)
{
source(args...);
return target();
}
else
{
return target(source(args...));
}
};
}
int main() {
int i = 10;
int j = 42;
auto p = pipeline([&]{ return j; },
[=](int val){ return val * i; });
if (p() != 420)
__builtin_abort();
}