template struct A { ~A() = delete; }; template auto h() -> A; template auto i(T) -> T; template auto f(T) -> decltype(i(h())); template auto f(T) -> void; auto g() -> void { f(42); }