diff --git a/include/iterator b/include/iterator
index bcf142a..dc079b4 100644
--- a/include/iterator
+++ b/include/iterator
@@ -1580,29 +1580,29 @@
 #endif  // !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_TRAILING_RETURN)
 
 #if _LIBCPP_STD_VER > 14
-template <class _C>
-constexpr auto size(const _C& __c) -> decltype(__c.size()) { return __c.size(); }
+template <class _Cont>
+constexpr auto size(const _Cont& __c) -> decltype(__c.size()) { return __c.size(); }
 
-template <class _Tp, size_t _N>
-constexpr size_t size(const _Tp (&__array)[_N]) noexcept { return _N; }
+template <class _Tp, size_t _Sz>
+constexpr size_t size(const _Tp (&__array)[_Sz]) noexcept { return _Sz; }
 
-template <class _C>
-constexpr auto empty(const _C& __c) -> decltype(__c.empty()) { return __c.empty(); }
+template <class _Cont>
+constexpr auto empty(const _Cont& __c) -> decltype(__c.empty()) { return __c.empty(); }
 
-template <class _Tp, size_t _N>
-constexpr bool empty(const _Tp (&__array)[_N]) noexcept { return false; }
+template <class _Tp, size_t _Sz>
+constexpr bool empty(const _Tp (&__array)[_Sz]) noexcept { return false; }
 
 template <class _Ep>
 constexpr bool empty(initializer_list<_Ep> __il) noexcept { return __il.size() == 0; }
 
-template <class _C> constexpr
-auto data(_C& __c) -> decltype(__c.data()) { return __c.data(); }
+template <class _Cont> constexpr
+auto data(_Cont& __c) -> decltype(__c.data()) { return __c.data(); }
 
-template <class _C> constexpr
-auto data(const _C& __c) -> decltype(__c.data()) { return __c.data(); }
+template <class _Cont> constexpr
+auto data(const _Cont& __c) -> decltype(__c.data()) { return __c.data(); }
 
-template <class _Tp, size_t _N>
-constexpr _Tp* data(_Tp (&__array)[_N]) noexcept { return __array; }
+template <class _Tp, size_t _Sz>
+constexpr _Tp* data(_Tp (&__array)[_Sz]) noexcept { return __array; }
 
 template <class _Ep>
 constexpr const _Ep* data(initializer_list<_Ep> __il) noexcept { return __il.begin(); }
