#include <vector>
#include <iostream>
//A type trait for a vector
template <typename T> struct Is_Vector { static const bool value = false; };
template <typename T> struct Is_Vector<std::vector<T>> { static const bool value = true; };
// A function that identifies whether the argument is a vector or not
template <typename Type>
bool isVector(Type object){
return Is_Vector<Type>::value;
}
int main() {
std::vector<int> vector;
int integer;
std::cout << std::boolalpha;
std::cout << isVector(vector) << '\n';
std::cout << isVector(integer) << '\n';
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKLy9BIHR5cGUgdHJhaXQgZm9yIGEgdmVjdG9yCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgSXNfVmVjdG9yICAgICAgICAgICAgICAgICB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gZmFsc2U7IH07CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgSXNfVmVjdG9yPHN0ZDo6dmVjdG9yPFQ+PiAgICB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgIH07CgoKLy8gQSBmdW5jdGlvbiB0aGF0IGlkZW50aWZpZXMgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSB2ZWN0b3Igb3Igbm90CnRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgpib29sIGlzVmVjdG9yKFR5cGUgb2JqZWN0KXsKCXJldHVybiBJc19WZWN0b3I8VHlwZT46OnZhbHVlOwp9CgppbnQgbWFpbigpIHsKCgoJc3RkOjp2ZWN0b3I8aW50PiB2ZWN0b3I7CglpbnQgaW50ZWdlcjsKCglzdGQ6OmNvdXQgPDwgIHN0ZDo6Ym9vbGFscGhhOwoJc3RkOjpjb3V0IDw8ICBpc1ZlY3Rvcih2ZWN0b3IpIDw8ICdcbic7CglzdGQ6OmNvdXQgPDwgIGlzVmVjdG9yKGludGVnZXIpIDw8ICdcbic7Cgp9