#pragma once #ifdef __cplusplus namespace types::traits::inner { template struct remove_pointer { using type = Tp; }; template struct remove_pointer { using type = T; }; template struct remove_reference { using type = Tr; }; template struct remove_reference { using type = T; }; } // namespace types::traits::inner namespace types::traits { template struct remove_pointer : inner::remove_pointer { }; template struct remove_reference : inner::remove_reference { }; template struct add_pointer { using type = T*; }; template struct add_reference { using type = T&; }; } // namespace types #endif