// PR c++/88752
// { dg-do compile { target c++17 } }
template <int a> struct b { static constexpr int c = a; };
class d;
template <typename> struct e { typedef d f; };
template <typename g> using h = typename e<g>::f;
template <typename> constexpr bool i = b<true>::c;
class d {
public:
  using j = float;
};
template <typename> void k();
int main() { k<d>(); }
template <class l> l m;
template <class, class r> void n(r o) {
  [](int) {}(o(m<d>));
}
template <typename> void k() {
  n<int>([](auto inputs) {
    auto p(inputs);
    using s = h<decltype(p)>;
    s q;
    if constexpr (i<typename s::j>)
      [&] { return q; }();
    return 42;
  });
}