diff --git a/include/boost/smart_ptr/allocate_shared_array.hpp b/include/boost/smart_ptr/allocate_shared_array.hpp index 4a7de24..0c17edd 100644 --- a/include/boost/smart_ptr/allocate_shared_array.hpp +++ b/include/boost/smart_ptr/allocate_shared_array.hpp @@ -29,12 +29,12 @@ namespace boost { T2* p2 = 0; std::size_t n1 = size * boost::detail::array_total::size; boost::detail::allocate_array_helper a1(allocator, n1, &p2); - boost::detail::array_deleter d1; + boost::detail::array_deleter d1(n1); boost::shared_ptr s1(p1, d1, a1); boost::detail::array_deleter* d2; p1 = reinterpret_cast(p2); d2 = get_deleter >(s1); - d2->construct(p2, n1); + d2->construct(p2); return boost::shared_ptr(s1, p1); } #if defined(BOOST_HAS_VARIADIC_TMPL) && defined(BOOST_HAS_RVALUE_REFS) @@ -47,12 +47,12 @@ namespace boost { T2* p2 = 0; std::size_t n1 = size * boost::detail::array_total::size; boost::detail::allocate_array_helper a1(allocator, n1, &p2); - boost::detail::array_deleter d1; + boost::detail::array_deleter d1(n1); boost::shared_ptr s1(p1, d1, a1); boost::detail::array_deleter* d2; p1 = reinterpret_cast(p2); d2 = get_deleter >(s1); - d2->construct(p2, n1, boost::detail::sp_forward(args)...); + d2->construct(p2, boost::detail::sp_forward(args)...); return boost::shared_ptr(s1, p1); } template @@ -60,9 +60,11 @@ namespace boost { allocate_shared(const A& allocator, Args&&... args) { typedef typename boost::detail::array_inner::type T1; typedef typename boost::detail::array_base::type T2; + enum { + N = boost::detail::array_total::size + }; T1* p1 = 0; T2* p2 = 0; - enum { N = boost::detail::array_total::size }; boost::detail::allocate_array_helper a1(allocator, &p2); boost::detail::array_deleter d1; boost::shared_ptr s1(p1, d1, a1); @@ -86,32 +88,34 @@ namespace boost { T3* p3 = 0; std::size_t n1 = list.size() * boost::detail::array_total::size; boost::detail::allocate_array_helper a1(allocator, n1, &p2); - boost::detail::array_deleter d1; + boost::detail::array_deleter d1(n1); boost::shared_ptr s1(p1, d1, a1); boost::detail::array_deleter* d2; p3 = reinterpret_cast(list.begin()); p1 = reinterpret_cast(p2); d2 = get_deleter >(s1); - d2->construct_list(p2, n1, p3); + d2->construct_list(p2, p3); return boost::shared_ptr(s1, p1); } +#endif +#if !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) template inline typename boost::detail::sp_if_size_array::type - allocate_shared(const A& allocator, - std::initializer_list::type> list) { + allocate_shared(const A& allocator, const T& list) { typedef typename boost::detail::array_inner::type T1; typedef typename boost::detail::array_base::type T2; typedef const T2 T3; - BOOST_ASSERT(list.size() == boost::detail::array_size::size); + enum { + N = boost::detail::array_total::size + }; T1* p1 = 0; T2* p2 = 0; T3* p3 = 0; - enum { N = boost::detail::array_total::size }; boost::detail::allocate_array_helper a1(allocator, &p2); boost::detail::array_deleter d1; boost::shared_ptr s1(p1, d1, a1); boost::detail::array_deleter* d2; - p3 = reinterpret_cast(list.begin()); + p3 = reinterpret_cast(list); p1 = reinterpret_cast(p2); d2 = get_deleter >(s1); d2->construct_list(p2, p3); @@ -120,43 +124,46 @@ namespace boost { template inline typename boost::detail::sp_if_array::type allocate_shared(const A& allocator, std::size_t size, - std::initializer_list::type> list) { + const typename boost::detail::array_inner::type& list) { typedef typename boost::detail::array_inner::type T1; typedef typename boost::detail::array_base::type T2; typedef const T2 T3; + enum { + M = boost::detail::array_total::size + }; T1* p1 = 0; T2* p2 = 0; T3* p3 = 0; - enum { M = boost::detail::array_total::size }; - std::size_t n1 = M * list.size(); + std::size_t n1 = M * size; boost::detail::allocate_array_helper a1(allocator, n1, &p2); - boost::detail::array_deleter d1; + boost::detail::array_deleter d1(n1); boost::shared_ptr s1(p1, d1, a1); boost::detail::array_deleter* d2; - p3 = reinterpret_cast(list.begin()); + p3 = reinterpret_cast(list); p1 = reinterpret_cast(p2); d2 = get_deleter >(s1); - d2->construct_list(p2, n1, p3, M); + d2->construct_list(p2, p3, M); return boost::shared_ptr(s1, p1); } template inline typename boost::detail::sp_if_size_array::type allocate_shared(const A& allocator, - std::initializer_list::type> list) { + const typename boost::detail::array_inner::type& list) { typedef typename boost::detail::array_inner::type T1; typedef typename boost::detail::array_base::type T2; typedef const T2 T3; - BOOST_ASSERT(list.size() == boost::detail::array_size::size); + enum { + M = boost::detail::array_total::size, + N = boost::detail::array_total::size + }; T1* p1 = 0; T2* p2 = 0; - T3* p3 = 0; - enum { M = boost::detail::array_total::size }; - enum { N = boost::detail::array_total::size }; + T3* p3 = 0; boost::detail::allocate_array_helper a1(allocator, &p2); boost::detail::array_deleter d1; boost::shared_ptr s1(p1, d1, a1); boost::detail::array_deleter* d2; - p3 = reinterpret_cast(list.begin()); + p3 = reinterpret_cast(list); p1 = reinterpret_cast(p2); d2 = get_deleter >(s1); d2->construct_list(p2, p3, M); diff --git a/include/boost/smart_ptr/detail/array_deleter.hpp b/include/boost/smart_ptr/detail/array_deleter.hpp index b43f5fa..5d89dd8 100644 --- a/include/boost/smart_ptr/detail/array_deleter.hpp +++ b/include/boost/smart_ptr/detail/array_deleter.hpp @@ -19,44 +19,48 @@ namespace boost { template class array_deleter { public: - array_deleter() - : size(0) { + array_deleter(std::size_t size) + : size(size), + object(0) { } ~array_deleter() { destroy(); } - void construct(T* memory, std::size_t count) { - for (object = memory; size < count; size++) { - void* p1 = object + size; + void construct(T* memory) { + object = memory; + for (std::size_t i = 0; i < size; i++) { + void* p1 = object + i; ::new(p1) T(); } } #if defined(BOOST_HAS_VARIADIC_TMPL) && defined(BOOST_HAS_RVALUE_REFS) template - void construct(T* memory, std::size_t count, Args&&... args) { - for (object = memory; size < count; size++) { - void* p1 = object + size; + void construct(T* memory, Args&&... args) { + object = memory; + for (std::size_t i = 0; i < size; i++) { + void* p1 = object + i; ::new(p1) T(args...); } } #endif -#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) - void construct_list(T* memory, std::size_t count, const T* list) { - for (object = memory; size < count; size++) { - void* p1 = object + size; - ::new(p1) T(list[size]); + void construct_list(T* memory, const T* list) { + object = memory; + for (std::size_t i = 0; i < size; i++) { + void* p1 = object + i; + ::new(p1) T(list[i]); } } - void construct_list(T* memory, std::size_t count, const T* list, std::size_t n) { - for (object = memory; size < count; size++) { - void* p1 = object + size; - ::new(p1) T(list[size % n]); + void construct_list(T* memory, const T* list, std::size_t n) { + object = memory; + for (std::size_t i = 0; i < size; i++) { + void* p1 = object + i; + ::new(p1) T(list[i % n]); } } -#endif - void construct_noinit(T* memory, std::size_t count) { - for (object = memory; size < count; size++) { - void* p1 = object + size; + void construct_noinit(T* memory) { + object = memory; + for (std::size_t i = 0; i < size; i++) { + void* p1 = object + i; ::new(p1) T; } } @@ -65,8 +69,11 @@ namespace boost { } private: void destroy() { - while (size > 0) { - object[--size].~T(); + if (object) { + for (std::size_t i = size; i > 0; ) { + object[--i].~T(); + } + object = 0; } } std::size_t size; @@ -98,7 +105,6 @@ namespace boost { } } #endif -#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) void construct_list(T* memory, const T* list) { object = memory; for (std::size_t i = 0; i < N; i++) { @@ -113,7 +119,6 @@ namespace boost { ::new(p1) T(list[i % n]); } } -#endif void construct_noinit(T* memory) { object = memory; for (std::size_t i = 0; i < N; i++) { diff --git a/include/boost/smart_ptr/detail/array_traits.hpp b/include/boost/smart_ptr/detail/array_traits.hpp index 3b80f46..3ef482a 100644 --- a/include/boost/smart_ptr/detail/array_traits.hpp +++ b/include/boost/smart_ptr/detail/array_traits.hpp @@ -22,8 +22,7 @@ namespace boost { typedef typename array_base::type type; }; template - struct array_size { - }; + struct array_size; template struct array_size { enum { @@ -43,8 +42,7 @@ namespace boost { }; }; template - struct array_inner { - }; + struct array_inner; template struct array_inner { typedef T type; @@ -53,17 +51,6 @@ namespace boost { struct array_inner { typedef T type; }; - template - struct arrays_inner { - }; - template - struct arrays_inner { - typedef T type; - }; - template - struct arrays_inner { - typedef T type; - }; } } diff --git a/include/boost/smart_ptr/make_shared_array.hpp b/include/boost/smart_ptr/make_shared_array.hpp index d1eeac7..89ff8f1 100644 --- a/include/boost/smart_ptr/make_shared_array.hpp +++ b/include/boost/smart_ptr/make_shared_array.hpp @@ -29,12 +29,12 @@ namespace boost { T2* p2 = 0; std::size_t n1 = size * boost::detail::array_total::size; boost::detail::make_array_helper a1(n1, &p2); - boost::detail::array_deleter d1; + boost::detail::array_deleter d1(n1); boost::shared_ptr s1(p1, d1, a1); boost::detail::array_deleter* d2; p1 = reinterpret_cast(p2); d2 = get_deleter >(s1); - d2->construct(p2, n1); + d2->construct(p2); return boost::shared_ptr(s1, p1); } #if defined(BOOST_HAS_VARIADIC_TMPL) && defined(BOOST_HAS_RVALUE_REFS) @@ -47,12 +47,12 @@ namespace boost { T2* p2 = 0; std::size_t n1 = size * boost::detail::array_total::size; boost::detail::make_array_helper a1(n1, &p2); - boost::detail::array_deleter d1; + boost::detail::array_deleter d1(n1); boost::shared_ptr s1(p1, d1, a1); boost::detail::array_deleter* d2; p1 = reinterpret_cast(p2); d2 = get_deleter >(s1); - d2->construct(p2, n1, boost::detail::sp_forward(args)...); + d2->construct(p2, boost::detail::sp_forward(args)...); return boost::shared_ptr(s1, p1); } template @@ -60,9 +60,11 @@ namespace boost { make_shared(Args&&... args) { typedef typename boost::detail::array_inner::type T1; typedef typename boost::detail::array_base::type T2; + enum { + N = boost::detail::array_total::size + }; T1* p1 = 0; T2* p2 = 0; - enum { N = boost::detail::array_total::size }; boost::detail::make_array_helper a1(&p2); boost::detail::array_deleter d1; boost::shared_ptr s1(p1, d1, a1); @@ -85,31 +87,34 @@ namespace boost { T3* p3 = 0; std::size_t n1 = list.size() * boost::detail::array_total::size; boost::detail::make_array_helper a1(n1, &p2); - boost::detail::array_deleter d1; + boost::detail::array_deleter d1(n1); boost::shared_ptr s1(p1, d1, a1); boost::detail::array_deleter* d2; p3 = reinterpret_cast(list.begin()); p1 = reinterpret_cast(p2); d2 = get_deleter >(s1); - d2->construct_list(p2, n1, p3); + d2->construct_list(p2, p3); return boost::shared_ptr(s1, p1); - } + } +#endif +#if !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) template inline typename boost::detail::sp_if_size_array::type - make_shared(std::initializer_list::type> list) { + make_shared(const T& list) { typedef typename boost::detail::array_inner::type T1; typedef typename boost::detail::array_base::type T2; typedef const T2 T3; - BOOST_ASSERT(list.size() == boost::detail::array_size::size); + enum { + N = boost::detail::array_total::size + }; T1* p1 = 0; T2* p2 = 0; T3* p3 = 0; - enum { N = boost::detail::array_total::size }; boost::detail::make_array_helper a1(&p2); boost::detail::array_deleter d1; boost::shared_ptr s1(p1, d1, a1); boost::detail::array_deleter* d2; - p3 = reinterpret_cast(list.begin()); + p3 = reinterpret_cast(list); p1 = reinterpret_cast(p2); d2 = get_deleter >(s1); d2->construct_list(p2, p3); @@ -118,42 +123,45 @@ namespace boost { template inline typename boost::detail::sp_if_array::type make_shared(std::size_t size, - std::initializer_list::type> list) { + const typename boost::detail::array_inner::type& list) { typedef typename boost::detail::array_inner::type T1; typedef typename boost::detail::array_base::type T2; typedef const T2 T3; + enum { + M = boost::detail::array_total::size + }; T1* p1 = 0; T2* p2 = 0; T3* p3 = 0; - enum { M = boost::detail::array_total::size }; std::size_t n1 = M * size; boost::detail::make_array_helper a1(n1, &p2); - boost::detail::array_deleter d1; + boost::detail::array_deleter d1(n1); boost::shared_ptr s1(p1, d1, a1); boost::detail::array_deleter* d2; - p3 = reinterpret_cast(list.begin()); + p3 = reinterpret_cast(list); p1 = reinterpret_cast(p2); d2 = get_deleter >(s1); - d2->construct_list(p2, n1, p3, M); + d2->construct_list(p2, p3, M); return boost::shared_ptr(s1, p1); } template inline typename boost::detail::sp_if_size_array::type - make_shared(std::initializer_list::type> list) { + make_shared(const typename boost::detail::array_inner::type& list) { typedef typename boost::detail::array_inner::type T1; typedef typename boost::detail::array_base::type T2; typedef const T2 T3; - BOOST_ASSERT(list.size() == boost::detail::array_size::size); + enum { + M = boost::detail::array_total::size, + N = boost::detail::array_total::size + }; T1* p1 = 0; T2* p2 = 0; T3* p3 = 0; - enum { M = boost::detail::array_total::size }; - enum { N = boost::detail::array_total::size }; boost::detail::make_array_helper a1(&p2); boost::detail::array_deleter d1; boost::shared_ptr s1(p1, d1, a1); boost::detail::array_deleter* d2; - p3 = reinterpret_cast(list.begin()); + p3 = reinterpret_cast(list); p1 = reinterpret_cast(p2); d2 = get_deleter >(s1); d2->construct_list(p2, p3, M); @@ -169,12 +177,12 @@ namespace boost { T2* p2 = 0; std::size_t n1 = size * boost::detail::array_total::size; boost::detail::make_array_helper a1(n1, &p2); - boost::detail::array_deleter d1; + boost::detail::array_deleter d1(n1); boost::shared_ptr s1(p1, d1, a1); boost::detail::array_deleter* d2; p1 = reinterpret_cast(p2); d2 = get_deleter >(s1); - d2->construct_noinit(p2, n1); + d2->construct_noinit(p2); return boost::shared_ptr(s1, p1); } template @@ -182,9 +190,11 @@ namespace boost { make_shared_noinit() { typedef typename boost::detail::array_inner::type T1; typedef typename boost::detail::array_base::type T2; + enum { + N = boost::detail::array_total::size + }; T1* p1 = 0; T2* p2 = 0; - enum { N = boost::detail::array_total::size }; boost::detail::make_array_helper a1(&p2); boost::detail::array_deleter d1; boost::shared_ptr s1(p1, d1, a1); diff --git a/make_shared_array.html b/make_shared_array.html index 2c0d5fc..b42d28a 100644 --- a/make_shared_array.html +++ b/make_shared_array.html @@ -12,7 +12,7 @@ Synopsis
Free Functions
Example
- History
+ History

Introduction

Originally the Boost function templates make_shared and allocate_shared were for efficient allocation of single @@ -34,7 +34,7 @@ template<typename T, typename A> shared_ptr<T[]> allocate_shared(const A& allocator, size_t size); - + #if defined(BOOST_HAS_VARIADIC_TMPL) && defined(BOOST_HAS_RVALUE_REFS) template<typename T, typename... Args> shared_ptr<T[]> make_shared(size_t size, Args&&... args); @@ -48,31 +48,33 @@ template<typename T, typename A, typename... Args> shared_ptr<T[N]> allocate_shared(const A& allocator, Args&&... args); #endif - + #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) template<typename T, typename... Args> shared_ptr<T[]> make_shared(initializer_list<T> list); - template<typename T, typename... Args> - shared_ptr<T[N]> make_shared(initializer_list<T> list); - - template<typename T, typename... Args> - shared_ptr<T[][N]> make_shared(size_t size, initializer_list<T> list); - - template<typename T, typename... Args> - shared_ptr<T[M][N]> make_shared(initializer_list<T> list); - template<typename T, typename A, typename... Args> shared_ptr<T[]> allocate_shared(const A& allocator, initializer_list<T> list); +#endif + +#if !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) + template<typename T, typename... Args> + shared_ptr<T[N]> make_shared(const T (&list)[N]); + + template<typename T, typename... Args> + shared_ptr<T[][N]> make_shared(size_t size, const T (&list)[N]); + + template<typename T, typename... Args> + shared_ptr<T[M][N]> make_shared(const T (&list)[N]); template<typename T, typename A, typename... Args> - shared_ptr<T[N]> allocate_shared(const A& allocator, initializer_list<T> list); + shared_ptr<T[N]> allocate_shared(const A& allocator, const T (&list)[N]); template<typename T, typename A, typename... Args> - shared_ptr<T[][N]> allocate_shared(const A& allocator, size_t size, initializer_list<T> list); + shared_ptr<T[][N]> allocate_shared(const A& allocator, size_t size, const T (&list)[N]); template<typename T, typename A, typename... Args> - shared_ptr<T[M][N]> allocate_shared(const A& allocator, initializer_list<T> list); + shared_ptr<T[M][N]> allocate_shared(const A& allocator, const T (&list)[N]); #endif template<typename T> @@ -141,25 +143,25 @@ template<typename T, typename A, typename... Args> from the initializer list.

template<typename T, typename... Args>
-    shared_ptr<T[N]> make_shared(initializer_list<T> list);
+    shared_ptr<T[N]> make_shared(const T (&list)[N]);
 template<typename T, typename A, typename... Args>
-    shared_ptr<T[N]> allocate_shared(const A& allocator, initializer_list<T> list);
+ shared_ptr<T[N]> allocate_shared(const A& allocator, const T (&list)[N]);

Description: These overloads of the utilities above are for a fixed size array.

template<typename T, typename... Args>
-    shared_ptr<T[][N]> make_shared(size_t size, initializer_list<T> list);
+    shared_ptr<T[][N]> make_shared(size_t size, const T (&list)[N]);
 template<typename T, typename A, typename... Args>
-    shared_ptr<T[][N]> allocate_shared(const A& allocator, size_t size, initializer_list<T> list);
+ shared_ptr<T[][N]> allocate_shared(const A& allocator, size_t size, const T (&list)[N]);

Description: These overloads initialize inner array elements from the initializer list.

template<typename T, typename... Args>
-    shared_ptr<T[M][N]> make_shared(initializer_list<T> list);
+    shared_ptr<T[M][N]> make_shared(const T (&list)[N]);
 template<typename T, typename A, typename... Args>
-    shared_ptr<T[M][N]> allocate_shared(const A& allocator, initializer_list<T> list);
+ shared_ptr<T[M][N]> allocate_shared(const A& allocator, const T (&list)[N]);

Description: These overloads of the utilities above are for a fixed size array.

diff --git a/test/allocate_shared_array_init_test.cpp b/test/allocate_shared_array_init_test.cpp index 6411aa8..1ff437f 100644 --- a/test/allocate_shared_array_init_test.cpp +++ b/test/allocate_shared_array_init_test.cpp @@ -28,13 +28,6 @@ int main() { BOOST_TEST(a1[2] == 2); BOOST_TEST(a1[3] == 3); } - { - boost::shared_ptr a1 = boost::allocate_shared(std::allocator(), { 0, 1, 2, 3 }); - BOOST_TEST(a1[0] == 0); - BOOST_TEST(a1[1] == 1); - BOOST_TEST(a1[2] == 2); - BOOST_TEST(a1[3] == 3); - } { boost::shared_ptr a1 = boost::allocate_shared(std::allocator(), { 0, 1, 2, 3 }); BOOST_TEST(a1[0] == 0); @@ -42,13 +35,6 @@ int main() { BOOST_TEST(a1[2] == 2); BOOST_TEST(a1[3] == 3); } - { - boost::shared_ptr a1 = boost::allocate_shared(std::allocator(), { 0, 1, 2, 3 }); - BOOST_TEST(a1[0] == 0); - BOOST_TEST(a1[1] == 1); - BOOST_TEST(a1[2] == 2); - BOOST_TEST(a1[3] == 3); - } { boost::shared_ptr a1 = boost::allocate_shared(std::allocator(), { 0, 1, 2, 3 }); BOOST_TEST(a1[0].value == 0); @@ -57,14 +43,30 @@ int main() { BOOST_TEST(a1[3].value == 3); } { - boost::shared_ptr a1 = boost::allocate_shared(std::allocator(), { 0, 1, 2, 3 }); + boost::shared_ptr a1 = boost::allocate_shared(std::allocator(), { 0, 1, 2, 3 }); BOOST_TEST(a1[0].value == 0); BOOST_TEST(a1[1].value == 1); BOOST_TEST(a1[2].value == 2); BOOST_TEST(a1[3].value == 3); } +#endif +#if !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) { - boost::shared_ptr a1 = boost::allocate_shared(std::allocator(), { 0, 1, 2, 3 }); + boost::shared_ptr a1 = boost::allocate_shared(std::allocator(), { 0, 1, 2, 3 }); + BOOST_TEST(a1[0] == 0); + BOOST_TEST(a1[1] == 1); + BOOST_TEST(a1[2] == 2); + BOOST_TEST(a1[3] == 3); + } + { + boost::shared_ptr a1 = boost::allocate_shared(std::allocator(), { 0, 1, 2, 3 }); + BOOST_TEST(a1[0] == 0); + BOOST_TEST(a1[1] == 1); + BOOST_TEST(a1[2] == 2); + BOOST_TEST(a1[3] == 3); + } + { + boost::shared_ptr a1 = boost::allocate_shared(std::allocator(), { 0, 1, 2, 3 }); BOOST_TEST(a1[0].value == 0); BOOST_TEST(a1[1].value == 1); BOOST_TEST(a1[2].value == 2); diff --git a/test/allocate_shared_arrays_create_test.cpp b/test/allocate_shared_arrays_create_test.cpp index 03a2d7e..8645179 100644 --- a/test/allocate_shared_arrays_create_test.cpp +++ b/test/allocate_shared_arrays_create_test.cpp @@ -11,6 +11,13 @@ int main() { #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) + { + boost::shared_ptr a1 = boost::allocate_shared(std::allocator(), {0, 1, 2, 3}); + BOOST_TEST(a1[0] == 0); + BOOST_TEST(a1[1] == 1); + BOOST_TEST(a1[2] == 2); + BOOST_TEST(a1[3] == 3); + } { boost::shared_ptr a1 = boost::allocate_shared(std::allocator(), { {0, 1}, {2, 3} }); BOOST_TEST(a1[0][0] == 0); @@ -18,6 +25,15 @@ int main() { BOOST_TEST(a1[1][0] == 2); BOOST_TEST(a1[1][1] == 3); } +#endif +#if !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) + { + boost::shared_ptr a1 = boost::allocate_shared(std::allocator(), {0, 1, 2, 3}); + BOOST_TEST(a1[0] == 0); + BOOST_TEST(a1[1] == 1); + BOOST_TEST(a1[2] == 2); + BOOST_TEST(a1[3] == 3); + } { boost::shared_ptr a1 = boost::allocate_shared(std::allocator(), { {0, 1}, {2, 3} }); BOOST_TEST(a1[0][0] == 0); @@ -25,13 +41,6 @@ int main() { BOOST_TEST(a1[1][0] == 2); BOOST_TEST(a1[1][1] == 3); } - { - boost::shared_ptr a1 = boost::allocate_shared(std::allocator(), {0, 1}); - BOOST_TEST(a1[0][0] == 0); - BOOST_TEST(a1[0][1] == 1); - BOOST_TEST(a1[1][0] == 0); - BOOST_TEST(a1[1][1] == 1); - } { boost::shared_ptr a1 = boost::allocate_shared(std::allocator(), 2, {0, 1}); BOOST_TEST(a1[0][0] == 0); @@ -46,6 +55,13 @@ int main() { BOOST_TEST(a1[1][1][0] == 2); BOOST_TEST(a1[1][1][1] == 3); } + { + boost::shared_ptr a1 = boost::allocate_shared(std::allocator(), {0, 1}); + BOOST_TEST(a1[0][0] == 0); + BOOST_TEST(a1[0][1] == 1); + BOOST_TEST(a1[1][0] == 0); + BOOST_TEST(a1[1][1] == 1); + } { boost::shared_ptr a1 = boost::allocate_shared(std::allocator(), { {0, 1}, {2, 3} }); BOOST_TEST(a1[0][0][0] == 0); diff --git a/test/make_shared_array_init_test.cpp b/test/make_shared_array_init_test.cpp index 6a4c5d5..fd61caf 100644 --- a/test/make_shared_array_init_test.cpp +++ b/test/make_shared_array_init_test.cpp @@ -28,13 +28,6 @@ int main() { BOOST_TEST(a1[2] == 2); BOOST_TEST(a1[3] == 3); } - { - boost::shared_ptr a1 = boost::make_shared({ 0, 1, 2, 3 }); - BOOST_TEST(a1[0] == 0); - BOOST_TEST(a1[1] == 1); - BOOST_TEST(a1[2] == 2); - BOOST_TEST(a1[3] == 3); - } { boost::shared_ptr a1 = boost::make_shared({ 0, 1, 2, 3 }); BOOST_TEST(a1[0] == 0); @@ -42,13 +35,6 @@ int main() { BOOST_TEST(a1[2] == 2); BOOST_TEST(a1[3] == 3); } - { - boost::shared_ptr a1 = boost::make_shared({ 0, 1, 2, 3 }); - BOOST_TEST(a1[0] == 0); - BOOST_TEST(a1[1] == 1); - BOOST_TEST(a1[2] == 2); - BOOST_TEST(a1[3] == 3); - } { boost::shared_ptr a1 = boost::make_shared({ 0, 1, 2, 3 }); BOOST_TEST(a1[0].value == 0); @@ -57,14 +43,30 @@ int main() { BOOST_TEST(a1[3].value == 3); } { - boost::shared_ptr a1 = boost::make_shared({ 0, 1, 2, 3 }); + boost::shared_ptr a1 = boost::make_shared({ 0, 1, 2, 3 }); BOOST_TEST(a1[0].value == 0); BOOST_TEST(a1[1].value == 1); BOOST_TEST(a1[2].value == 2); BOOST_TEST(a1[3].value == 3); } +#endif +#if !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) { - boost::shared_ptr a1 = boost::make_shared({ 0, 1, 2, 3 }); + boost::shared_ptr a1 = boost::make_shared({ 0, 1, 2, 3 }); + BOOST_TEST(a1[0] == 0); + BOOST_TEST(a1[1] == 1); + BOOST_TEST(a1[2] == 2); + BOOST_TEST(a1[3] == 3); + } + { + boost::shared_ptr a1 = boost::make_shared({ 0, 1, 2, 3 }); + BOOST_TEST(a1[0] == 0); + BOOST_TEST(a1[1] == 1); + BOOST_TEST(a1[2] == 2); + BOOST_TEST(a1[3] == 3); + } + { + boost::shared_ptr a1 = boost::make_shared({ 0, 1, 2, 3 }); BOOST_TEST(a1[0].value == 0); BOOST_TEST(a1[1].value == 1); BOOST_TEST(a1[2].value == 2); diff --git a/test/make_shared_arrays_create_test.cpp b/test/make_shared_arrays_create_test.cpp index e468378..eb08759 100644 --- a/test/make_shared_arrays_create_test.cpp +++ b/test/make_shared_arrays_create_test.cpp @@ -8,10 +8,16 @@ */ #include #include -#include int main() { #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) + { + boost::shared_ptr a1 = boost::make_shared({0, 1, 2, 3}); + BOOST_TEST(a1[0] == 0); + BOOST_TEST(a1[1] == 1); + BOOST_TEST(a1[2] == 2); + BOOST_TEST(a1[3] == 3); + } { boost::shared_ptr a1 = boost::make_shared({ {0, 1}, {2, 3} }); BOOST_TEST(a1[0][0] == 0); @@ -19,6 +25,15 @@ int main() { BOOST_TEST(a1[1][0] == 2); BOOST_TEST(a1[1][1] == 3); } +#endif +#if !defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX) + { + boost::shared_ptr a1 = boost::make_shared({0, 1, 2, 3}); + BOOST_TEST(a1[0] == 0); + BOOST_TEST(a1[1] == 1); + BOOST_TEST(a1[2] == 2); + BOOST_TEST(a1[3] == 3); + } { boost::shared_ptr a1 = boost::make_shared({ {0, 1}, {2, 3} }); BOOST_TEST(a1[0][0] == 0); @@ -26,13 +41,6 @@ int main() { BOOST_TEST(a1[1][0] == 2); BOOST_TEST(a1[1][1] == 3); } - { - boost::shared_ptr a1 = boost::make_shared({ 0, 1 }); - BOOST_TEST(a1[0][0] == 0); - BOOST_TEST(a1[0][1] == 1); - BOOST_TEST(a1[1][0] == 0); - BOOST_TEST(a1[1][1] == 1); - } { boost::shared_ptr a1 = boost::make_shared(2, {0, 1}); BOOST_TEST(a1[0][0] == 0); @@ -47,6 +55,13 @@ int main() { BOOST_TEST(a1[1][1][0] == 2); BOOST_TEST(a1[1][1][1] == 3); } + { + boost::shared_ptr a1 = boost::make_shared({ 0, 1 }); + BOOST_TEST(a1[0][0] == 0); + BOOST_TEST(a1[0][1] == 1); + BOOST_TEST(a1[1][0] == 0); + BOOST_TEST(a1[1][1] == 1); + } { boost::shared_ptr a1 = boost::make_shared({ {0, 1}, {2, 3} }); BOOST_TEST(a1[0][0][0] == 0);