template <typename T> void foo (T val) { if (std::is_reference<T>()) std::cout << val << " is reference." << std::endl; else std::cout << val << " is not reference." << std::endl;
if (std::is_const<T>()) std::cout << val << " is const." << std::endl; else std::cout << val << " is not const." << std::endl; }