#include <iostream>
#include <typeinfo>
#include <type_traits>
using namespace std;
double u;
float v;
template<typename U, typename V>
decltype(u + v) f(U u, V v) { return 0; }
template<typename U, typename V>
auto g(U u, V v) -> decltype(u + v) { return 0; }
int main() {
cout << typeid(f(1, 2)).name() << endl; // double
cout << typeid(g(1, 2)).name() << endl; // int
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CiNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmRvdWJsZSB1OwpmbG9hdCB2OwoKdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KZGVjbHR5cGUodSArIHYpIGYoVSB1LCBWIHYpIHsgcmV0dXJuIDA7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+CmF1dG8gZyhVIHUsIFYgdikgLT4gZGVjbHR5cGUodSArIHYpIHsgcmV0dXJuIDA7IH0KCmludCBtYWluKCkgewoJCgljb3V0IDw8IHR5cGVpZChmKDEsIDIpKS5uYW1lKCkgPDwgZW5kbDsgLy8gZG91YmxlCgljb3V0IDw8IHR5cGVpZChnKDEsIDIpKS5uYW1lKCkgPDwgZW5kbDsgLy8gaW50CgkKCXJldHVybiAwOwp9