#include <iostream>
#include <complex>
#include <type_traits>
namespace std {
template< class T >
struct is_floating_point<std::complex<T>> : std::integral_constant<
bool,
std::is_same<float, typename std::remove_cv<T>::type>::value ||
std::is_same<double, typename std::remove_cv<T>::type>::value ||
std::is_same<long double, typename std::remove_cv<T>::type>::value
> {};
}
int main() {
std::cout << std::boolalpha << std::is_floating_point<double>::value << std::endl;
std::cout << std::boolalpha << std::is_floating_point<std::complex<double>>::value << std::endl;
std::cout << std::boolalpha << std::is_floating_point<std::complex<long double>>::value << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y29tcGxleD4KI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKbmFtZXNwYWNlIHN0ZCB7Cgp0ZW1wbGF0ZTwgY2xhc3MgVCA+CnN0cnVjdCBpc19mbG9hdGluZ19wb2ludDxzdGQ6OmNvbXBsZXg8VD4+IDogc3RkOjppbnRlZ3JhbF9jb25zdGFudDwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8ZmxvYXQsIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2N2PFQ+Ojp0eXBlPjo6dmFsdWUgIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8ZG91YmxlLCB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jdjxUPjo6dHlwZT46OnZhbHVlICB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppc19zYW1lPGxvbmcgZG91YmxlLCB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jdjxUPjo6dHlwZT46OnZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgID4ge307Cgp9CgppbnQgbWFpbigpIHsKICBzdGQ6OmNvdXQgPDwgc3RkOjpib29sYWxwaGEgPDwgc3RkOjppc19mbG9hdGluZ19wb2ludDxkb3VibGU+Ojp2YWx1ZSA8PCBzdGQ6OmVuZGw7CiAgc3RkOjpjb3V0IDw8IHN0ZDo6Ym9vbGFscGhhIDw8IHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8c3RkOjpjb21wbGV4PGRvdWJsZT4+Ojp2YWx1ZSA8PCBzdGQ6OmVuZGw7CiAgc3RkOjpjb3V0IDw8IHN0ZDo6Ym9vbGFscGhhIDw8IHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8c3RkOjpjb21wbGV4PGxvbmcgZG91YmxlPj46OnZhbHVlIDw8IHN0ZDo6ZW5kbDsKfQ==