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