#include <iostream>
#include <type_traits>
using namespace std;
class C
{
private:
class integral {};
class floatingpoint {};
template<typename T>
using SelectOverload =
typename conditional<
is_integral<T>::value,
integral,
typename conditional<is_floating_point<T>::value,
floatingpoint,
void
>::type
>::type;
public:
template<typename T>
explicit C(T&& value) { init(forward<T>(value), SelectOverload<T>()); }
private:
template<typename T>
void init(T&& value, integral) { cout << "integral" << std::endl; }
template<typename T>
void init(T&& value, floatingpoint) { cout << "floating point" << std::endl; }
};
int main()
{
C a(1);
C b(1.0);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQwp7CnByaXZhdGU6CiAgICBjbGFzcyBpbnRlZ3JhbCB7fTsKICAgIGNsYXNzIGZsb2F0aW5ncG9pbnQge307CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgIHVzaW5nIFNlbGVjdE92ZXJsb2FkID0KICAgICAgICB0eXBlbmFtZSBjb25kaXRpb25hbDwKICAgICAgICAgICAgaXNfaW50ZWdyYWw8VD46OnZhbHVlLAogICAgICAgICAgICBpbnRlZ3JhbCwKICAgICAgICAgICAgdHlwZW5hbWUgY29uZGl0aW9uYWw8aXNfZmxvYXRpbmdfcG9pbnQ8VD46OnZhbHVlLAogICAgICAgICAgICAgICAgZmxvYXRpbmdwb2ludCwKICAgICAgICAgICAgICAgIHZvaWQKICAgICAgICAgICAgPjo6dHlwZQogICAgICAgID46OnR5cGU7CgpwdWJsaWM6CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgZXhwbGljaXQgQyhUJiYgdmFsdWUpIHsgaW5pdChmb3J3YXJkPFQ+KHZhbHVlKSwgU2VsZWN0T3ZlcmxvYWQ8VD4oKSk7IH0KCnByaXZhdGU6ICAgIAogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgIHZvaWQgaW5pdChUJiYgdmFsdWUsIGludGVncmFsKSB7IGNvdXQgPDwgImludGVncmFsIiA8PCBzdGQ6OmVuZGw7IH0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICB2b2lkIGluaXQoVCYmIHZhbHVlLCBmbG9hdGluZ3BvaW50KSB7IGNvdXQgPDwgImZsb2F0aW5nIHBvaW50IiA8PCBzdGQ6OmVuZGw7IH0KICAgIAp9OwoKaW50IG1haW4oKQp7CiAgICBDIGEoMSk7CiAgICBDIGIoMS4wKTsKfQ==