#include <iostream>
#include <complex>
#include <type_traits>
using namespace std;
double get_real(double n) { return n; }
double get_real(const std::complex<double>& n) { return n.real(); }
template <typename T>
std::complex<double> f(T n)
{
if (std::is_same<T, std::complex<double>>::value)
return n * std::complex<double>{1, -1} + get_real(n);
else
return -n;
}
int main()
{
std::cout << f(std::complex<double>{10, 10}) << '\n';
std::cout << f(10.0) << '\n';
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KICAgICNpbmNsdWRlIDxjb21wbGV4PgogICAgI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogICAgCiAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOwogICAgCiAgICBkb3VibGUgZ2V0X3JlYWwoZG91YmxlIG4pIHsgcmV0dXJuIG47IH0KCiAgICBkb3VibGUgZ2V0X3JlYWwoY29uc3Qgc3RkOjpjb21wbGV4PGRvdWJsZT4mIG4pIHsgcmV0dXJuIG4ucmVhbCgpOyB9CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICBzdGQ6OmNvbXBsZXg8ZG91YmxlPiBmKFQgbikKICAgIHsKICAgICAgICBpZiAoc3RkOjppc19zYW1lPFQsIHN0ZDo6Y29tcGxleDxkb3VibGU+Pjo6dmFsdWUpCiAgICAgICAgICAgIHJldHVybiBuICogc3RkOjpjb21wbGV4PGRvdWJsZT57MSwgLTF9ICsgZ2V0X3JlYWwobik7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gLW47CiAgICB9CiAgICAKICAgIAogICAgaW50IG1haW4oKQogICAgewogICAgCXN0ZDo6Y291dCA8PCBmKHN0ZDo6Y29tcGxleDxkb3VibGU+ezEwLCAxMH0pIDw8ICdcbic7CiAgICAJc3RkOjpjb3V0IDw8IGYoMTAuMCkgPDwgJ1xuJzsKICAgIH0K