template <class T>
class Hola {
T a, b;
public:
Hola(const T a0, const T b0) : a(a0), b(b0) {}
Hola<T> operator * (const T c) { return Hola<T>(a*c, b*c); }
};
//template <class T>
Hola<double> adios(const double a, const double b) {
Hola<double> h(a, b);
return h*2; // 13.3 Overload resolution [over.match]
// 13.3.2 Viable functions [over.match.viable]
// 13.3.3.1 Implicit conversion sequences [over.best.ics]
// 13.3.3.1.1 Standard conversion sequences [over.ics.scs]
// 4.9 Floating-integral conversions [conv.fpint]
}
int main() {
Hola<double> h = adios(1.0, 2.0);
return 0;
}