Index: include/memory =================================================================== --- include/memory +++ include/memory @@ -1855,6 +1855,9 @@ _LIBCPP_INLINE_VISIBILITY raw_storage_iterator& operator++() {++__x_; return *this;} _LIBCPP_INLINE_VISIBILITY raw_storage_iterator operator++(int) {raw_storage_iterator __t(*this); ++__x_; return __t;} +#if _LIBCPP_STD_VER >= 14 + _LIBCPP_INLINE_VISIBILITY _OutputIterator base() const { return __x_; } +#endif }; template Index: test/std/utilities/memory/storage.iterator/raw_storag_iterator.pass.cpp =================================================================== --- test/std/utilities/memory/storage.iterator/raw_storag_iterator.pass.cpp +++ test/std/utilities/memory/storage.iterator/raw_storag_iterator.pass.cpp @@ -34,11 +34,17 @@ Storage buffer; std::raw_storage_iterator it((A*)&buffer); assert(A_constructed == 0); +#if __cplusplus >= 201402L + assert(it.base() == (A*)&buffer); +#endif for (int i = 0; i < 3; ++i) { *it++ = A(i+1); A* ap = (A*)&buffer + i; assert(*ap == i+1); assert(A_constructed == i+1); +#if __cplusplus >= 201402L + assert(it.base() == ap + 1); // next place to write +#endif } }