1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
template <class T> struct A { ~A() = delete; }; template <class T> auto h() -> A<T>; template <class T> auto i(T) -> T; template <class T> auto f(T) -> decltype(i(h<T>())); template <class T> auto f(T) -> void; auto g() -> void { f(42); }