@@ -180,6 +180,7 @@ template <typename T, int N> struct vec {
180180 vec (std::initializer_list<T> /* il*/ ) {}
181181};
182182
183+ #if !BEMAN_INPLACE_VECTOR_FREESTANDING_DELETED()
183184template <typename T, std::size_t N> constexpr void test_il_constructor () {
184185 auto v = [] {
185186 switch (N) {
@@ -240,6 +241,7 @@ template <typename T, std::size_t N> constexpr void test_il_assignment() {
240241 std::bad_alloc);
241242 }
242243}
244+ #endif
243245
244246template <typename T, std::size_t N> constexpr void test_default_constructor () {
245247 vector<T, N> v;
@@ -252,13 +254,20 @@ template <typename T, std::size_t N>
252254constexpr void
253255test_default_constructor_bounds_and_contiguous_iterators (std::size_t sz) {
254256 CHECK (sz <= N);
257+ #if !BEMAN_INPLACE_VECTOR_FREESTANDING_DELETED()
255258 vector<T, N> v (sz);
256259 CHECK (v.size () == sz);
257260 CHECK (v.max_size () == N);
258261 CHECK (v.capacity () == N);
259262 for (std::size_t i = 0 ; i != sz; ++i) {
260263 CHECK (v[i] == T{});
261264 }
265+ #else
266+ vector<T, N> v;
267+ for (auto i = 0 ; i < sz; ++i) {
268+ v.unchecked_push_back (T{});
269+ }
270+ #endif
262271 for (std::size_t i = 0 ; i < v.size (); ++i) { // contiguous
263272 CHECK (*(v.begin () + i) == *(std::addressof (*v.begin ()) + i));
264273 CHECK (*(v.cbegin () + i) == *(std::addressof (*v.cbegin ()) + i));
@@ -342,8 +351,10 @@ constexpr void test_constructor_input_iterators() {}
342351#endif
343352
344353template <typename T, std::size_t N> constexpr bool test_all_ () {
354+ #if !BEMAN_INPLACE_VECTOR_FREESTANDING_DELETED()
345355 test_il_constructor<T, N>();
346356 test_il_assignment<T, N>();
357+ #endif
347358 test_default_constructor<T, N>();
348359 for (size_t i = 0 ; i < N; ++i)
349360 test_default_constructor_bounds_and_contiguous_iterators<T, N>(i);
@@ -358,6 +369,19 @@ template <typename T, std::size_t N> void test_all() {
358369 test_all_<T, N>();
359370}
360371
372+ template <typename T>
373+ T construct_vec (std::initializer_list<typename T::value_type> il) {
374+ #if BEMAN_INPLACE_VECTOR_FREESTANDING_DELETED()
375+ T vec;
376+ for (auto &v : il) {
377+ vec.unchecked_push_back (v);
378+ }
379+ return vec;
380+ #else
381+ return T (il);
382+ #endif
383+ }
384+
361385int main () {
362386 { // storage
363387 using beman::details::inplace_vector::storage::non_trivial;
@@ -825,7 +849,7 @@ int main() {
825849
826850 { // erase
827851 {
828- vector<int , 4 > l1 {1 , 2 , 3 };
852+ auto l1 = construct_vec< vector<int , 4 >>( {1 , 2 , 3 }) ;
829853 CHECK (l1.size () == 3 );
830854 vector<int , 4 >::const_iterator i = l1.begin ();
831855 ++i;
@@ -850,37 +874,38 @@ int main() {
850874 { // erase iter iter
851875 using vec_t = vector<int , 5 >;
852876 {
853- vec_t l1{1 , 2 , 3 };
877+ auto l1 = construct_vec< vec_t >( {1 , 2 , 3 }) ;
854878 vec_t ::iterator i = l1.erase (l1.cbegin (), l1.cbegin ());
855879 CHECK (l1.size () == 3 );
856880 CHECK (std::distance (l1.cbegin (), l1.cend ()) == 3 );
857881 CHECK (i == l1.begin ());
858882 }
859883 {
860- vec_t l1{1 , 2 , 3 };
884+ auto l1 = construct_vec< vec_t >( {1 , 2 , 3 }) ;
861885 vec_t ::iterator i = l1.erase (l1.cbegin (), std::next (l1.cbegin ()));
862886 CHECK (l1.size () == 2 );
863887 CHECK (std::distance (l1.cbegin (), l1.cend ()) == 2 );
864888 CHECK (i == l1.begin ());
865- CHECK (l1 == vec_t {2 , 3 });
889+ CHECK (l1 == construct_vec< vec_t >( {2 , 3 }) );
866890 }
867891 {
868- vec_t l1{1 , 2 , 3 };
892+ auto l1 = construct_vec< vec_t >( {1 , 2 , 3 }) ;
869893 vec_t ::iterator i = l1.erase (l1.cbegin (), std::next (l1.cbegin (), 2 ));
870894 CHECK (l1.size () == 1 );
871895 CHECK (std::distance (l1.cbegin (), l1.cend ()) == 1 );
872896 CHECK (i == l1.begin ());
873- CHECK (l1 == vec_t {3 });
897+ CHECK (l1 == construct_vec< vec_t >( {3 }) );
874898 }
875899 {
876- vec_t l1{1 , 2 , 3 };
900+ auto l1 = construct_vec< vec_t >( {1 , 2 , 3 }) ;
877901 vec_t ::iterator i = l1.erase (l1.cbegin (), std::next (l1.cbegin (), 3 ));
878902 CHECK (l1.empty ());
879903 CHECK (std::distance (l1.cbegin (), l1.cend ()) == 0 );
880904 CHECK (i == l1.begin ());
881905 }
882906 {
883- vector<vec_t , 3 > outer{vec_t {1 }, vec_t {1 }};
907+ auto outer = construct_vec<vector<vec_t , 3 >>(
908+ {construct_vec<vec_t >({1 }), construct_vec<vec_t >({1 })});
884909 outer.erase (outer.begin (), outer.begin ());
885910 CHECK (outer.size () == 2 );
886911 CHECK (outer[0 ].size () == 1 );
0 commit comments