[libc++] Avoid instantiating type_trait classes

Use `using` aliases to avoid instantiating lots of types

Reviewed By: ldionne, #libc

Spies: libcxx-commits, miyuki

Differential Revision: https://reviews.llvm.org/D132785

NOKEYCHECK=True
GitOrigin-RevId: 5fab33af7f083a0043112742027172e9f297c07f
diff --git a/src/string.cpp b/src/string.cpp
index 8db1295..db211b2 100644
--- a/src/string.cpp
+++ b/src/string.cpp
@@ -85,7 +85,7 @@
 inline V as_integer_helper(const string& func, const S& str, size_t* idx, int base, F f) {
     typename S::value_type* ptr = nullptr;
     const typename S::value_type* const p = str.c_str();
-    typename remove_reference<decltype(errno)>::type errno_save = errno;
+    __libcpp_remove_reference_t<decltype(errno)> errno_save = errno;
     errno = 0;
     V r = f(p, &ptr, base);
     swap(errno, errno_save);
@@ -172,7 +172,7 @@
 inline V as_float_helper(const string& func, const S& str, size_t* idx, F f) {
     typename S::value_type* ptr = nullptr;
     const typename S::value_type* const p = str.c_str();
-    typename remove_reference<decltype(errno)>::type errno_save = errno;
+    __libcpp_remove_reference_t<decltype(errno)> errno_save = errno;
     errno = 0;
     V r = f(p, &ptr);
     swap(errno, errno_save);