diff options
author | Marshall Clow <mclow.lists@gmail.com> | 2013-09-07 16:16:19 +0000 |
---|---|---|
committer | Marshall Clow <mclow.lists@gmail.com> | 2013-09-07 16:16:19 +0000 |
commit | 630c5e535c294da715191c284bac62a912bca00e (patch) | |
tree | 68b150ba6e8e668b1a8c5ad52d9e6af2ca7f1040 | |
parent | d14f153a7e48979b250c3e88c4aad811044712ad (diff) | |
download | bcm5719-llvm-630c5e535c294da715191c284bac62a912bca00e.tar.gz bcm5719-llvm-630c5e535c294da715191c284bac62a912bca00e.zip |
LWG Issue 2210 (Part #1): deque
llvm-svn: 190251
-rw-r--r-- | libcxx/include/deque | 14 | ||||
-rw-r--r-- | libcxx/test/containers/sequences/deque/deque.cons/size.pass.cpp | 58 |
2 files changed, 70 insertions, 2 deletions
diff --git a/libcxx/include/deque b/libcxx/include/deque index 4faa87f8b34..5bb8ff7a8ab 100644 --- a/libcxx/include/deque +++ b/libcxx/include/deque @@ -41,6 +41,7 @@ public: deque() noexcept(is_nothrow_default_constructible<allocator_type>::value); explicit deque(const allocator_type& a); explicit deque(size_type n); + explicit deque(size_type n, const Allocator& a); // C++14 deque(size_type n, const value_type& v); deque(size_type n, const value_type& v, const allocator_type& a); template <class InputIterator> @@ -1209,6 +1210,9 @@ public: {} _LIBCPP_INLINE_VISIBILITY deque(const allocator_type& __a) : __base(__a) {} explicit deque(size_type __n); +#if _LIBCPP_STD_VER > 11 + explicit deque(size_type __n, const _Allocator& __a); +#endif deque(size_type __n, const value_type& __v); deque(size_type __n, const value_type& __v, const allocator_type& __a); template <class _InputIter> @@ -1431,6 +1435,16 @@ deque<_Tp, _Allocator>::deque(size_type __n) __append(__n); } +#if _LIBCPP_STD_VER > 11 +template <class _Tp, class _Allocator> +deque<_Tp, _Allocator>::deque(size_type __n, const _Allocator& __a) + : __base(__a) +{ + if (__n > 0) + __append(__n); +} +#endif + template <class _Tp, class _Allocator> deque<_Tp, _Allocator>::deque(size_type __n, const value_type& __v) { diff --git a/libcxx/test/containers/sequences/deque/deque.cons/size.pass.cpp b/libcxx/test/containers/sequences/deque/deque.cons/size.pass.cpp index 6d0bf424829..1f07caf4860 100644 --- a/libcxx/test/containers/sequences/deque/deque.cons/size.pass.cpp +++ b/libcxx/test/containers/sequences/deque/deque.cons/size.pass.cpp @@ -20,7 +20,29 @@ template <class T, class Allocator> void -test(unsigned n) +test2(unsigned n) +{ +#if _LIBCPP_STD_VER > 11 + typedef std::deque<T, Allocator> C; + typedef typename C::const_iterator const_iterator; + assert(DefaultOnly::count == 0); + { + C d(n, Allocator()); + assert(DefaultOnly::count == n); + assert(d.size() == n); + assert(distance(d.begin(), d.end()) == d.size()); +#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES + for (const_iterator i = d.begin(), e = d.end(); i != e; ++i) + assert(*i == T()); +#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES + } + assert(DefaultOnly::count == 0); +#endif +} + +template <class T, class Allocator> +void +test1(unsigned n) { typedef std::deque<T, Allocator> C; typedef typename C::const_iterator const_iterator; @@ -38,6 +60,29 @@ test(unsigned n) assert(DefaultOnly::count == 0); } +template <class T, class Allocator> +void +test3(unsigned n, Allocator const &alloc = Allocator()) +{ +#if _LIBCPP_STD_VER > 11 + typedef std::deque<T, Allocator> C; + typedef typename C::const_iterator const_iterator; + { + C d(n, alloc); + assert(d.size() == n); + assert(d.get_allocator() == alloc); + } +#endif +} + +template <class T, class Allocator> +void +test(unsigned n) +{ + test1<T, Allocator> ( n ); + test2<T, Allocator> ( n ); +} + int main() { test<DefaultOnly, std::allocator<DefaultOnly> >(0); @@ -52,8 +97,17 @@ int main() test<DefaultOnly, std::allocator<DefaultOnly> >(4095); test<DefaultOnly, std::allocator<DefaultOnly> >(4096); test<DefaultOnly, std::allocator<DefaultOnly> >(4097); - test<DefaultOnly, stack_allocator<DefaultOnly, 4096> >(4095); + + test1<DefaultOnly, stack_allocator<DefaultOnly, 4096> >(4095); + #if __cplusplus >= 201103L test<DefaultOnly, min_allocator<DefaultOnly> >(4095); #endif + +#if _LIBCPP_STD_VER > 11 + test3<DefaultOnly, std::allocator<DefaultOnly>> (1023); + test3<int, std::allocator<int>>(1); + test3<int, min_allocator<int>> (3); +#endif + } |