#ifndef A_H #define A_H template <typename T> struct A { template <typename I> A(I i1, I i2) { } A(double) {} A(double, double) {} A(double, int) {} A(int, double) {} }; template <typename T1, typename T2> T1 fff(T2* t) { return T1(t, t); } inline A<int> ff(int i) { return fff<A<int>>(&i); } struct Aggregate { int member; }; bool operator==(Aggregate, Aggregate) = delete; #endif