#include <iostream>
#include <vector>
#include <type_traits>
using namespace std;
template<typename In>
auto foo(In input, std::true_type) {
return input[0];
}
template<typename In>
auto foo(In input, std::false_type) {
return input;
}
template<bool IsVector, typename In>
auto foo(In input) {
using tag = typename conditional<IsVector, true_type, false_type>::type;
return foo(input, tag{});
}
int main() {
cout << foo<true>(vector<double>{{1, 2 , 3}}) << endl;
cout << foo<false>(4.5) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKdGVtcGxhdGU8dHlwZW5hbWUgSW4+CmF1dG8gZm9vKEluIGlucHV0LCBzdGQ6OnRydWVfdHlwZSkgewoJcmV0dXJuIGlucHV0WzBdOwp9CnRlbXBsYXRlPHR5cGVuYW1lIEluPgphdXRvIGZvbyhJbiBpbnB1dCwgc3RkOjpmYWxzZV90eXBlKSB7CglyZXR1cm4gaW5wdXQ7Cn0KdGVtcGxhdGU8Ym9vbCBJc1ZlY3RvciwgdHlwZW5hbWUgSW4+CmF1dG8gZm9vKEluIGlucHV0KSB7Cgl1c2luZyB0YWcgPSB0eXBlbmFtZSBjb25kaXRpb25hbDxJc1ZlY3RvciwgdHJ1ZV90eXBlLCBmYWxzZV90eXBlPjo6dHlwZTsKCXJldHVybiBmb28oaW5wdXQsIHRhZ3t9KTsKfQoKCmludCBtYWluKCkgewoJY291dCA8PCBmb288dHJ1ZT4odmVjdG9yPGRvdWJsZT57ezEsIDIgLCAzfX0pIDw8IGVuZGw7Cgljb3V0IDw8IGZvbzxmYWxzZT4oNC41KSA8PCBlbmRsOwoJcmV0dXJuIDA7Cn0=