#include <iostream>
#include <typeinfo>
#include <cassert>
int main() {
auto foo = [](auto x, auto y) -> decltype(x) {
return x + y;
};
if(typeid(foo(2, 3.14f)) == typeid(int)) {
std::cout << "int" << std::endl; // GCC
} else if(typeid(foo(2, 3.14f)) == typeid(float)) {
std::cout << "float" << std::endl; // VS2015
}
assert(typeid(foo(2, 3.14f)) == typeid(int)); // this fails on VS2015
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CiNpbmNsdWRlIDxjYXNzZXJ0PgoKaW50IG1haW4oKSB7CiAgICBhdXRvIGZvbyA9IFtdKGF1dG8geCwgYXV0byB5KSAtPiBkZWNsdHlwZSh4KSB7CiAgICAgICAgcmV0dXJuIHggKyB5OwogICAgfTsKCiAgICBpZih0eXBlaWQoZm9vKDIsIDMuMTRmKSkgPT0gdHlwZWlkKGludCkpIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgImludCIgPDwgc3RkOjplbmRsOyAgICAvLyBHQ0MKICAgIH0gZWxzZSBpZih0eXBlaWQoZm9vKDIsIDMuMTRmKSkgPT0gdHlwZWlkKGZsb2F0KSkgewogICAgICAgIHN0ZDo6Y291dCA8PCAiZmxvYXQiIDw8IHN0ZDo6ZW5kbDsgIC8vIFZTMjAxNQogICAgfQoKICAgIGFzc2VydCh0eXBlaWQoZm9vKDIsIDMuMTRmKSkgPT0gdHlwZWlkKGludCkpOyAvLyB0aGlzIGZhaWxzIG9uIFZTMjAxNQoKICAgIHJldHVybiAwOwp9