3737#endif
3838#endif
3939
40- // beman::from_range_t
41- namespace beman {
40+ // Private utilities
41+ namespace beman ::inplace_vector::details {
42+
4243struct from_range_t {};
4344inline constexpr from_range_t from_range;
44- }; // namespace beman
45-
46- // Private utilities
47- namespace beman ::details::inplace_vector {
4845
4946// clang-format off
5047// Smallest unsigned integer that can represent values in [0, N].
@@ -80,10 +77,7 @@ concept lessthan_comparable = requires(const T &a, const T &b) {
8077 { a < b } -> std::convertible_to<bool >;
8178};
8279
83- } // namespace beman::details::inplace_vector
84-
8580// Types implementing the `inplace_vector`'s storage
86- namespace beman ::details::inplace_vector {
8781namespace storage {
8882
8983// Storage for zero elements.
@@ -271,22 +265,20 @@ struct inplace_vector_base : private storage::storage_for<T, N> {
271265 // element access
272266
273267 constexpr reference operator [](size_type n) {
274- return details::inplace_vector:: index (*this , n);
268+ return details::index (*this , n);
275269 }
276270 constexpr const_reference operator [](size_type n) const {
277- return details::inplace_vector::index (*this , n);
278- }
279- constexpr reference front () {
280- return details::inplace_vector::index (*this , size_type (0 ));
271+ return details::index (*this , n);
281272 }
273+ constexpr reference front () { return details::index (*this , size_type (0 )); }
282274 constexpr const_reference front () const {
283- return details::inplace_vector:: index (*this , size_type (0 ));
275+ return details::index (*this , size_type (0 ));
284276 }
285277 constexpr reference back () {
286- return details::inplace_vector:: index (*this , size () - size_type (1 ));
278+ return details::index (*this , size () - size_type (1 ));
287279 }
288280 constexpr const_reference back () const {
289- return details::inplace_vector:: index (*this , size () - size_type (1 ));
281+ return details::index (*this , size () - size_type (1 ));
290282 }
291283
292284 // [containers.sequences.inplace_vector.data], data access
@@ -361,7 +353,7 @@ struct inplace_vector_base : private storage::storage_for<T, N> {
361353 return unchecked_emplace_back (std::forward<T &&>(x));
362354 }
363355
364- template <details::inplace_vector:: container_compatible_range<T> R>
356+ template <details::container_compatible_range<T> R>
365357 constexpr std::ranges::borrowed_iterator_t <R> try_append_range (R &&rg)
366358 requires(std::constructible_from<T, std::ranges::range_reference_t <R>>)
367359 {
@@ -428,7 +420,7 @@ struct inplace_vector_base : private storage::storage_for<T, N> {
428420
429421 constexpr friend auto operator <=>(const inplace_vector_base &x,
430422 const inplace_vector_base &y)
431- requires (beman:: details::inplace_vector ::lessthan_comparable<T>)
423+ requires (details::lessthan_comparable<T>)
432424 {
433425 if constexpr (std::three_way_comparable<T>) {
434426 return std::lexicographical_compare_three_way (x.begin (), x.end (),
@@ -514,19 +506,17 @@ struct inplace_vector_base : private storage::storage_for<T, N> {
514506 }
515507};
516508
517- } // namespace beman::details::inplace_vector
509+ } // namespace beman::inplace_vector::details
518510
519- namespace beman {
511+ namespace beman ::inplace_vector {
520512
521513template <typename IV>
522514concept has_constexpr_support =
523- details::inplace_vector::satify_constexpr<typename IV::value_type,
524- IV::capacity ()>;
515+ details::satify_constexpr<typename IV::value_type, IV::capacity()>;
525516
526517// / Dynamically-resizable fixed-N vector with inplace storage.
527518template <class T , size_t N>
528- struct inplace_vector
529- : public details::inplace_vector::inplace_vector_base<T, N> {
519+ struct inplace_vector : public details ::inplace_vector_base<T, N> {
530520 using value_type = T;
531521 using pointer = T *;
532522 using const_pointer = const T *;
@@ -563,7 +553,7 @@ struct inplace_vector
563553 return this ->back ();
564554 }
565555
566- template <details::inplace_vector:: container_compatible_range<T> R>
556+ template <details::container_compatible_range<T> R>
567557 constexpr void append_range (R &&rg)
568558 requires(std::constructible_from<T, std::ranges::range_reference_t <R>>)
569559 {
@@ -614,7 +604,7 @@ struct inplace_vector
614604 return pos;
615605 }
616606
617- template <details::inplace_vector:: container_compatible_range<T> R>
607+ template <details::container_compatible_range<T> R>
618608 constexpr iterator insert_range (const_iterator position, R &&rg)
619609 requires(std::constructible_from<T, std::ranges::range_reference_t <R>> &&
620610 std::movable<T>)
@@ -672,7 +662,7 @@ struct inplace_vector
672662 this ->clear ();
673663 insert (this ->begin (), first, last);
674664 }
675- template <details::inplace_vector:: container_compatible_range<T> R>
665+ template <details::container_compatible_range<T> R>
676666 constexpr void assign_range (R &&rg)
677667 requires(std::constructible_from<T, std::ranges::range_reference_t <R>> &&
678668 std::movable<T>)
@@ -738,13 +728,13 @@ struct inplace_vector
738728 if (pos >= this ->size ()) [[unlikely]] {
739729 BEMAN_IV_THROW_OR_ABORT (std::out_of_range (" inplace_vector::at" ));
740730 }
741- return details::inplace_vector:: index (*this , pos);
731+ return details::index (*this , pos);
742732 }
743733 constexpr const_reference at (size_type pos) const {
744734 if (pos >= this ->size ()) [[unlikely]] {
745735 BEMAN_IV_THROW_OR_ABORT (std::out_of_range (" inplace_vector::at" ));
746736 }
747- return details::inplace_vector:: index (*this , pos);
737+ return details::index (*this , pos);
748738 }
749739
750740 // [containers.sequences.inplace_vector.cons], construct/copy/destroy
@@ -780,8 +770,8 @@ struct inplace_vector
780770 insert (this ->begin (), first, last);
781771 }
782772
783- template <details::inplace_vector:: container_compatible_range<T> R>
784- constexpr inplace_vector (beman ::from_range_t , R &&rg)
773+ template <details::container_compatible_range<T> R>
774+ constexpr inplace_vector (details ::from_range_t , R &&rg)
785775 requires(std::constructible_from<T, std::ranges::range_reference_t <R>> &&
786776 std::movable<T>)
787777 {
@@ -791,8 +781,7 @@ struct inplace_vector
791781
792782namespace freestanding {
793783template <class T , size_t N>
794- struct inplace_vector
795- : public details::inplace_vector::inplace_vector_base<T, N> {
784+ struct inplace_vector : public details ::inplace_vector_base<T, N> {
796785 using value_type = T;
797786 using pointer = T *;
798787 using const_pointer = const T *;
@@ -818,7 +807,7 @@ struct inplace_vector
818807 requires(std::constructible_from<T, T &&>)
819808 = delete;
820809
821- template <details::inplace_vector:: container_compatible_range<T> R>
810+ template <details::container_compatible_range<T> R>
822811 constexpr void append_range (R &&rg)
823812 requires(std::constructible_from<T, std::ranges::range_reference_t <R>>)
824813 = delete;
@@ -835,7 +824,7 @@ struct inplace_vector
835824 std::movable<T>)
836825 = delete;
837826
838- template <details::inplace_vector:: container_compatible_range<T> R>
827+ template <details::container_compatible_range<T> R>
839828 constexpr iterator insert_range (const_iterator position, R &&rg)
840829 requires(std::constructible_from<T, std::ranges::range_reference_t <R>> &&
841830 std::movable<T>)
@@ -871,7 +860,7 @@ struct inplace_vector
871860 requires(std::constructible_from<T, std::iter_reference_t <InputIterator>> &&
872861 std::movable<T>)
873862 = delete;
874- template <details::inplace_vector:: container_compatible_range<T> R>
863+ template <details::container_compatible_range<T> R>
875864 constexpr void assign_range (R &&rg)
876865 requires(std::constructible_from<T, std::ranges::range_reference_t <R>> &&
877866 std::movable<T>)
@@ -925,8 +914,8 @@ struct inplace_vector
925914 std::movable<T>)
926915 = delete;
927916
928- template <details::inplace_vector:: container_compatible_range<T> R>
929- constexpr inplace_vector (beman::from_range_t , R &&rg)
917+ template <details::container_compatible_range<T> R>
918+ constexpr inplace_vector (beman::inplace_vector::details:: from_range_t , R &&rg)
930919 requires(std::constructible_from<T, std::ranges::range_reference_t <R>> &&
931920 std::movable<T>)
932921 = delete;
@@ -935,25 +924,24 @@ struct inplace_vector
935924} // namespace freestanding
936925
937926template <typename T, std::size_t N, typename U = T>
938- constexpr std::size_t
939- erase (details::inplace_vector::inplace_vector_base<T, N> &c, const U &value) {
927+ constexpr std::size_t erase (details::inplace_vector_base<T, N> &c,
928+ const U &value) {
940929 auto it = std::remove (c.begin (), c.end (), value);
941930 auto r = std::distance (it, c.end ());
942931 c.erase (it, c.end ());
943932 return r;
944933}
945934
946935template <typename T, std::size_t N, typename Predicate>
947- constexpr std::size_t
948- erase_if (details::inplace_vector::inplace_vector_base<T, N> &c,
949- Predicate pred) {
936+ constexpr std::size_t erase_if (details::inplace_vector_base<T, N> &c,
937+ Predicate pred) {
950938 auto it = std::remove_if (c.begin (), c.end (), pred);
951939 auto r = std::distance (it, c.end ());
952940 c.erase (it, c.end ());
953941 return r;
954942}
955943
956- } // namespace beman
944+ } // namespace beman::inplace_vector
957945
958946#undef IV_EXPECT
959947
0 commit comments