#include #include #include #include using namespace std; int32_t getInt() { return INT32_MAX; } int64_t getInt64() { return INT64_MAX; } void getStr(string& str) { str = "abc"; } void getVInt(vector& vint) { vint = {1, 2, 3}; } void getVStr(vector& vstr) { vstr = {"abc", "def"}; } template T getVal() { T val; T& rVal = val; if (typeid(T) == typeid(int)) { (int&)rVal = getInt(); } else if (typeid(T) == typeid(int64_t)) { (int64_t&)rVal = getInt64(); } else if (typeid(T) == typeid(string)) { getStr((string&)rVal); } else if (typeid(T) == typeid(vector)) { getVInt((vector&)rVal); } else if (typeid(T) == typeid(vector)) { getVStr((vector&)rVal); } return val; } int main() { assert(getVal() == INT32_MAX); assert(getVal() == INT64_MAX); assert(getVal() == "abc"); assert(getVal>() == vector({1, 2, 3})); assert(getVal>() == vector({"abc", "def"})); }