diff --git a/libcxx/include/__iterator/back_insert_iterator.h b/libcxx/include/__iterator/back_insert_iterator.h --- a/libcxx/include/__iterator/back_insert_iterator.h +++ b/libcxx/include/__iterator/back_insert_iterator.h @@ -55,6 +55,8 @@ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX17 back_insert_iterator& operator*() {return *this;} _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX17 back_insert_iterator& operator++() {return *this;} _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX17 back_insert_iterator operator++(int) {return *this;} + + _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_AFTER_CXX17 _Container* __get_container() const { return container; } }; template <class _Container> diff --git a/libcxx/test/libcxx/iterators/predef.iterators/insert.iterators/back.insert.iter.ops/get_container.pass.cpp b/libcxx/test/libcxx/iterators/predef.iterators/insert.iterators/back.insert.iter.ops/get_container.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/libcxx/iterators/predef.iterators/insert.iterators/back.insert.iter.ops/get_container.pass.cpp @@ -0,0 +1,37 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// <iterator> + +// back_insert_iterator + +// _Container* __get_container(); // constexpr in C++20 + +#include <iterator> +#include <vector> + +#include "test_macros.h" +#include "nasty_containers.h" +#include "test_constexpr_container.h" + +template <class C> +TEST_CONSTEXPR_CXX20 bool test(C c) { + const std::back_insert_iterator<C> i(c); + assert(i.__get_container() == std::addressof(c)); + return true; +} + +int main(int, char**) { + test(std::vector<int>()); + test(nasty_vector<int>()); +#if TEST_STD_VER >= 20 + test(ConstexprFixedCapacityDeque<int, 10>()); + static_assert(test(ConstexprFixedCapacityDeque<int, 10>())); +#endif + return 0; +}