#include template struct remove_reference { using type = T; }; // implement your specializations here // implement remove_pointers here int main() { static_assert(std::is_same< remove_reference::type, int >::value, "remove_reference failed for 'int&&'"); static_assert(std::is_same< remove_reference::type, int >::value, "remove_reference failed for 'int&'"); static_assert(std::is_same< remove_reference::type, int >::value, "remove_reference failed for 'int'"); static_assert(std::is_same< remove_reference::type, int const >::value, "remove_reference failed for 'int const&'"); static_assert(std::is_same< remove_pointers::type, int >::value, "remove_pointers failed for 'int'"); static_assert(std::is_same< remove_pointers::type, int >::value, "remove_pointers failed for 'int*'"); static_assert(std::is_same< remove_pointers::type, int >::value, "remove_pointers failed for 'int* const'"); static_assert(std::is_same< remove_pointers::type, int >::value, "remove_pointers failed for 'int* const*'"); static_assert(std::is_same< remove_pointers::type, int >::value, "remove_pointers failed for 'int***'"); }