#include #include #include template struct my_type {}; fun: (v : _) -> std::string = { return inspect v -> std::string { is std::vector = "std::vector"; is std::array = "std::array"; is std::variant = "std::variant"; is my_type = "my_type"; is _ = "unknown"; }; } fun2: (v : _) -> std::string = { if v is std::vector { return "std::vector"; } if v is std::array { return "std::array"; } if v is std::variant { return "std::variant"; } if v is my_type { return "my_type"; } return "unknown"; } main: () -> int = { vec : std::vector = (1,2,3); arr : std::array = (1,2,3,4); var : std::variant = ("C++ rulez"); myt : my_type = (); std::cout << "inspected vec : (fun(vec))$" << std::endl; std::cout << "inspected arr : (fun(arr))$" << std::endl; std::cout << "inspected var : (fun(var))$" << std::endl; std::cout << "inspected myt : (fun(myt))$" << std::endl; std::cout << "inspected vec : (fun2(vec))$" << std::endl; std::cout << "inspected arr : (fun2(arr))$" << std::endl; std::cout << "inspected var : (fun2(var))$" << std::endl; std::cout << "inspected myt : (fun2(myt))$" << std::endl; }