// PR c++/85149 // { dg-do run { target c++17 } } template struct is_void { static constexpr bool value = false; }; template <> struct is_void { static constexpr bool value = true; }; template constexpr decltype(auto) pipeline(S source, T target) { return [=](auto... args) { if constexpr(false && is_void::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(); }