diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2016-07-23 20:47:26 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2016-07-23 20:47:26 +0000 |
commit | 51072bd6bf79ef2bc6a922079bff57c31c1effbc (patch) | |
tree | 91a2effbc9e6f80bdbbf9eb70e06c51ad0867ea0 /test/std/iterators | |
parent | bb5e33f003797b67974a8893f7f2930fc51b8210 (diff) |
Notes
Diffstat (limited to 'test/std/iterators')
24 files changed, 146 insertions, 70 deletions
diff --git a/test/std/iterators/iterator.container/data.pass.cpp b/test/std/iterators/iterator.container/data.pass.cpp index 3d1fa33358db..a7a17480235a 100644 --- a/test/std/iterators/iterator.container/data.pass.cpp +++ b/test/std/iterators/iterator.container/data.pass.cpp @@ -13,7 +13,9 @@ // template <class T, size_t N> constexpr T* data(T (&array)[N]) noexcept; // C++17 // template <class E> constexpr const E* data(initializer_list<E> il) noexcept; // C++17 -#if __cplusplus <= 201402L +#include "test_macros.h" + +#if TEST_STD_VER <= 14 int main () {} #else @@ -40,7 +42,7 @@ void test_container( C& c ) { assert ( std::data(c) == c.data()); } - + template<typename T> void test_container( std::initializer_list<T>& c) { @@ -58,7 +60,7 @@ int main() std::vector<int> v; v.push_back(1); std::array<int, 1> a; a[0] = 3; std::initializer_list<int> il = { 4 }; - + test_container ( v ); test_container ( a ); test_container ( il ); @@ -66,7 +68,7 @@ int main() test_const_container ( v ); test_const_container ( a ); test_const_container ( il ); - + static constexpr int arrA [] { 1, 2, 3 }; test_const_array ( arrA ); } diff --git a/test/std/iterators/iterator.container/empty.pass.cpp b/test/std/iterators/iterator.container/empty.pass.cpp index f26cb98e1aed..f9b8b94a89f9 100644 --- a/test/std/iterators/iterator.container/empty.pass.cpp +++ b/test/std/iterators/iterator.container/empty.pass.cpp @@ -12,7 +12,9 @@ // template <class T, size_t N> constexpr bool empty(const T (&array)[N]) noexcept; // C++17 // template <class E> constexpr bool empty(initializer_list<E> il) noexcept; // C++17 -#if __cplusplus <= 201402L +#include "test_macros.h" + +#if TEST_STD_VER <= 14 int main () {} #else @@ -40,7 +42,7 @@ void test_container( C& c ) { assert ( std::empty(c) == c.empty()); } - + template<typename T> void test_container( std::initializer_list<T>& c ) { @@ -59,7 +61,7 @@ int main() std::list<int> l; l.push_back(2); std::array<int, 1> a; a[0] = 3; std::initializer_list<int> il = { 4 }; - + test_container ( v ); test_container ( l ); test_container ( a ); @@ -69,7 +71,7 @@ int main() test_const_container ( l ); test_const_container ( a ); test_const_container ( il ); - + static constexpr int arrA [] { 1, 2, 3 }; test_const_array ( arrA ); } diff --git a/test/std/iterators/iterator.container/size.pass.cpp b/test/std/iterators/iterator.container/size.pass.cpp index 705fb40e1926..87b0ef897072 100644 --- a/test/std/iterators/iterator.container/size.pass.cpp +++ b/test/std/iterators/iterator.container/size.pass.cpp @@ -11,7 +11,9 @@ // template <class C> constexpr auto size(const C& c) -> decltype(c.size()); // C++17 // template <class T, size_t N> constexpr size_t size(const T (&array)[N]) noexcept; // C++17 -#if __cplusplus <= 201402L +#include "test_macros.h" + +#if TEST_STD_VER <= 14 int main () {} #else @@ -39,7 +41,7 @@ void test_container( C& c) { assert ( std::size(c) == c.size()); } - + template<typename T> void test_container( std::initializer_list<T>& c ) { @@ -58,7 +60,7 @@ int main() std::list<int> l; l.push_back(2); std::array<int, 1> a; a[0] = 3; std::initializer_list<int> il = { 4 }; - + test_container ( v ); test_container ( l ); test_container ( a ); @@ -68,7 +70,7 @@ int main() test_const_container ( l ); test_const_container ( a ); test_const_container ( il ); - + static constexpr int arrA [] { 1, 2, 3 }; test_const_array ( arrA ); } diff --git a/test/std/iterators/iterator.primitives/std.iterator.tags/bidirectional_iterator_tag.pass.cpp b/test/std/iterators/iterator.primitives/std.iterator.tags/bidirectional_iterator_tag.pass.cpp index 0f368c3b765f..ecda1d146949 100644 --- a/test/std/iterators/iterator.primitives/std.iterator.tags/bidirectional_iterator_tag.pass.cpp +++ b/test/std/iterators/iterator.primitives/std.iterator.tags/bidirectional_iterator_tag.pass.cpp @@ -17,6 +17,7 @@ int main() { std::bidirectional_iterator_tag tag; + ((void)tag); // Prevent unused warning static_assert((std::is_base_of<std::forward_iterator_tag, std::bidirectional_iterator_tag>::value), ""); static_assert((!std::is_base_of<std::output_iterator_tag, diff --git a/test/std/iterators/iterator.primitives/std.iterator.tags/forward_iterator_tag.pass.cpp b/test/std/iterators/iterator.primitives/std.iterator.tags/forward_iterator_tag.pass.cpp index 0936595c85d6..e11b8e9ba7ac 100644 --- a/test/std/iterators/iterator.primitives/std.iterator.tags/forward_iterator_tag.pass.cpp +++ b/test/std/iterators/iterator.primitives/std.iterator.tags/forward_iterator_tag.pass.cpp @@ -17,6 +17,7 @@ int main() { std::forward_iterator_tag tag; + ((void)tag); // Prevent unused warning static_assert((std::is_base_of<std::input_iterator_tag, std::forward_iterator_tag>::value), ""); static_assert((!std::is_base_of<std::output_iterator_tag, diff --git a/test/std/iterators/iterator.primitives/std.iterator.tags/input_iterator_tag.pass.cpp b/test/std/iterators/iterator.primitives/std.iterator.tags/input_iterator_tag.pass.cpp index afeac3e91cae..19b517c328e7 100644 --- a/test/std/iterators/iterator.primitives/std.iterator.tags/input_iterator_tag.pass.cpp +++ b/test/std/iterators/iterator.primitives/std.iterator.tags/input_iterator_tag.pass.cpp @@ -17,6 +17,7 @@ int main() { std::input_iterator_tag tag; + ((void)tag); // Prevent unused warning static_assert((!std::is_base_of<std::output_iterator_tag, std::input_iterator_tag>::value), ""); } diff --git a/test/std/iterators/iterator.primitives/std.iterator.tags/output_iterator_tag.pass.cpp b/test/std/iterators/iterator.primitives/std.iterator.tags/output_iterator_tag.pass.cpp index 7f7f66a98f4a..e315b2724f82 100644 --- a/test/std/iterators/iterator.primitives/std.iterator.tags/output_iterator_tag.pass.cpp +++ b/test/std/iterators/iterator.primitives/std.iterator.tags/output_iterator_tag.pass.cpp @@ -17,6 +17,7 @@ int main() { std::output_iterator_tag tag; + ((void)tag); // Prevent unused warning static_assert((!std::is_base_of<std::input_iterator_tag, std::output_iterator_tag>::value), ""); } diff --git a/test/std/iterators/iterator.primitives/std.iterator.tags/random_access_iterator_tag.pass.cpp b/test/std/iterators/iterator.primitives/std.iterator.tags/random_access_iterator_tag.pass.cpp index 04f830bc3109..f16a3b74c53f 100644 --- a/test/std/iterators/iterator.primitives/std.iterator.tags/random_access_iterator_tag.pass.cpp +++ b/test/std/iterators/iterator.primitives/std.iterator.tags/random_access_iterator_tag.pass.cpp @@ -17,6 +17,7 @@ int main() { std::random_access_iterator_tag tag; + ((void)tag); // Prevent unused warning static_assert((std::is_base_of<std::bidirectional_iterator_tag, std::random_access_iterator_tag>::value), ""); static_assert((!std::is_base_of<std::output_iterator_tag, diff --git a/test/std/iterators/iterator.range/begin-end.pass.cpp b/test/std/iterators/iterator.range/begin-end.pass.cpp index bd7e0aa90fbc..ec3f61789b27 100644 --- a/test/std/iterators/iterator.range/begin-end.pass.cpp +++ b/test/std/iterators/iterator.range/begin-end.pass.cpp @@ -15,7 +15,9 @@ // template <class E> reverse_iterator<const E*> rbegin(initializer_list<E> il); // template <class E> reverse_iterator<const E*> rend(initializer_list<E> il); -#if __cplusplus >= 201103L +#include "test_macros.h" + +#if TEST_STD_VER >= 11 #include <iterator> #include <cassert> #include <vector> @@ -81,7 +83,7 @@ void test_container( C & c, typename C::value_type val ) { assert ( std::crend(c) == c.crend()); #endif } - + template<typename T> void test_container( std::initializer_list<T> & c, T val ) { assert ( std::begin(c) == c.begin()); @@ -121,7 +123,7 @@ int main(){ std::list<int> l; l.push_back(2); std::array<int, 1> a; a[0] = 3; std::initializer_list<int> il = { 4 }; - + test_container ( v, 1 ); test_container ( l, 2 ); test_container ( a, 3 ); @@ -131,7 +133,7 @@ int main(){ test_const_container ( l, 2 ); test_const_container ( a, 3 ); test_const_container ( il, 4 ); - + static constexpr int arrA [] { 1, 2, 3 }; test_const_array ( arrA ); #if _LIBCPP_STD_VER > 11 diff --git a/test/std/iterators/predef.iterators/insert.iterators/back.insert.iterator/types.pass.cpp b/test/std/iterators/predef.iterators/insert.iterators/back.insert.iterator/types.pass.cpp index 2611c9a4b0cc..7aa7f3443aa4 100644 --- a/test/std/iterators/predef.iterators/insert.iterators/back.insert.iterator/types.pass.cpp +++ b/test/std/iterators/predef.iterators/insert.iterators/back.insert.iterator/types.pass.cpp @@ -21,7 +21,7 @@ // typedef Cont container_type; // typedef void value_type; // typedef void difference_type; -// typedef back_insert_iterator<Cont>& reference; +// typedef void reference; // typedef void pointer; // }; @@ -48,7 +48,7 @@ test() static_assert((std::is_same<typename R::container_type, C>::value), ""); static_assert((std::is_same<typename R::value_type, void>::value), ""); static_assert((std::is_same<typename R::difference_type, void>::value), ""); - static_assert((std::is_same<typename R::reference, R&>::value), ""); + static_assert((std::is_same<typename R::reference, void>::value), ""); static_assert((std::is_same<typename R::pointer, void>::value), ""); static_assert((std::is_same<typename R::iterator_category, std::output_iterator_tag>::value), ""); } diff --git a/test/std/iterators/predef.iterators/insert.iterators/front.insert.iterator/types.pass.cpp b/test/std/iterators/predef.iterators/insert.iterators/front.insert.iterator/types.pass.cpp index 755133a91948..7a7c678edaaf 100644 --- a/test/std/iterators/predef.iterators/insert.iterators/front.insert.iterator/types.pass.cpp +++ b/test/std/iterators/predef.iterators/insert.iterators/front.insert.iterator/types.pass.cpp @@ -21,7 +21,7 @@ // typedef Container container_type; // typedef void value_type; // typedef void difference_type; -// typedef front_insert_iterator<Cont>& reference; +// typedef void reference; // typedef void pointer; // typedef output_iterator_tag iterator_category; // }; @@ -49,7 +49,7 @@ test() static_assert((std::is_same<typename R::container_type, C>::value), ""); static_assert((std::is_same<typename R::value_type, void>::value), ""); static_assert((std::is_same<typename R::difference_type, void>::value), ""); - static_assert((std::is_same<typename R::reference, R&>::value), ""); + static_assert((std::is_same<typename R::reference, void>::value), ""); static_assert((std::is_same<typename R::pointer, void>::value), ""); static_assert((std::is_same<typename R::iterator_category, std::output_iterator_tag>::value), ""); } diff --git a/test/std/iterators/predef.iterators/insert.iterators/insert.iterator/types.pass.cpp b/test/std/iterators/predef.iterators/insert.iterators/insert.iterator/types.pass.cpp index cf63df63e89b..5b61a3895132 100644 --- a/test/std/iterators/predef.iterators/insert.iterators/insert.iterator/types.pass.cpp +++ b/test/std/iterators/predef.iterators/insert.iterators/insert.iterator/types.pass.cpp @@ -22,7 +22,7 @@ // typedef Cont container_type; // typedef void value_type; // typedef void difference_type; -// typedef insert_iterator<Cont>& reference; +// typedef void reference; // typedef void pointer; // }; @@ -53,7 +53,7 @@ test() static_assert((std::is_same<typename R::container_type, C>::value), ""); static_assert((std::is_same<typename R::value_type, void>::value), ""); static_assert((std::is_same<typename R::difference_type, void>::value), ""); - static_assert((std::is_same<typename R::reference, R&>::value), ""); + static_assert((std::is_same<typename R::reference, void>::value), ""); static_assert((std::is_same<typename R::pointer, void>::value), ""); static_assert((std::is_same<typename R::iterator_category, std::output_iterator_tag>::value), ""); } diff --git a/test/std/iterators/predef.iterators/move.iterators/move.iterator/types.pass.cpp b/test/std/iterators/predef.iterators/move.iterators/move.iterator/types.pass.cpp index 9bdf7215e9ee..a6d4d61e13ce 100644 --- a/test/std/iterators/predef.iterators/move.iterators/move.iterator/types.pass.cpp +++ b/test/std/iterators/predef.iterators/move.iterators/move.iterator/types.pass.cpp @@ -18,7 +18,7 @@ // public: // typedef Iter iterator_type; // typedef Iter::difference_type difference_type; -// typedef Iterator pointer; +// typedef Iter pointer; // typedef Iter::value_type value_type; // typedef value_type&& reference; // }; @@ -26,8 +26,18 @@ #include <iterator> #include <type_traits> +#include "test_macros.h" #include "test_iterators.h" +template <class ValueType, class Reference> +struct DummyIt { + typedef std::forward_iterator_tag iterator_category; + typedef ValueType value_type; + typedef std::ptrdiff_t difference_type; + typedef ValueType* pointer; + typedef Reference reference; +}; + template <class It> void test() @@ -36,9 +46,9 @@ test() typedef std::iterator_traits<It> T; static_assert((std::is_same<typename R::iterator_type, It>::value), ""); static_assert((std::is_same<typename R::difference_type, typename T::difference_type>::value), ""); - static_assert((std::is_same<typename R::pointer, typename T::pointer>::value), ""); + static_assert((std::is_same<typename R::pointer, It>::value), ""); static_assert((std::is_same<typename R::value_type, typename T::value_type>::value), ""); -#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES +#if TEST_STD_VER >= 11 static_assert((std::is_same<typename R::reference, typename R::value_type&&>::value), ""); #else static_assert((std::is_same<typename R::reference, typename T::reference>::value), ""); @@ -53,4 +63,33 @@ int main() test<bidirectional_iterator<char*> >(); test<random_access_iterator<char*> >(); test<char*>(); +#if TEST_STD_VER >= 11 + { + typedef DummyIt<int, int> T; + typedef std::move_iterator<T> It; + static_assert(std::is_same<It::reference, int>::value, ""); + } + { + typedef DummyIt<int, std::reference_wrapper<int> > T; + typedef std::move_iterator<T> It; + static_assert(std::is_same<It::reference, std::reference_wrapper<int> >::value, ""); + } + { + // Check that move_iterator uses whatever reference type it's given + // when it's not a reference. + typedef DummyIt<int, long > T; + typedef std::move_iterator<T> It; + static_assert(std::is_same<It::reference, long>::value, ""); + } + { + typedef DummyIt<int, int&> T; + typedef std::move_iterator<T> It; + static_assert(std::is_same<It::reference, int&&>::value, ""); + } + { + typedef DummyIt<int, int&&> T; + typedef std::move_iterator<T> It; + static_assert(std::is_same<It::reference, int&&>::value, ""); + } +#endif } diff --git a/test/std/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.make/make_reverse_iterator.pass.cpp b/test/std/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.make/make_reverse_iterator.pass.cpp index 98b7331cd386..7ec287e5cd37 100644 --- a/test/std/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.make/make_reverse_iterator.pass.cpp +++ b/test/std/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.make/make_reverse_iterator.pass.cpp @@ -7,6 +7,7 @@ // //===----------------------------------------------------------------------===// +// UNSUPPORTED: c++98, c++03, c++11 // <iterator> // reverse_iterator @@ -19,8 +20,6 @@ #include "test_iterators.h" -#if _LIBCPP_STD_VER > 11 - template <class It> void test(It i) @@ -37,6 +36,4 @@ int main() while ( b != e ) test ( b++ ); } -#else -int main () {} -#endif + diff --git a/test/std/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opref/op_arrow.pass.cpp b/test/std/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opref/op_arrow.pass.cpp index efbdf1406c96..404e8fbf19bf 100644 --- a/test/std/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opref/op_arrow.pass.cpp +++ b/test/std/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opref/op_arrow.pass.cpp @@ -63,13 +63,13 @@ int main() { A a; test(&a+1, A()); - + { std::list<B> l; l.push_back(B(0)); l.push_back(B(1)); l.push_back(B(2)); - + { std::list<B>::const_iterator i = l.begin(); assert ( i->get() == 0 ); ++i; @@ -77,7 +77,7 @@ int main() assert ( i->get() == 2 ); ++i; assert ( i == l.end ()); } - + { std::list<B>::const_reverse_iterator ri = l.rbegin(); assert ( ri->get() == 2 ); ++ri; diff --git a/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.fail.cpp b/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.fail.cpp index 5e6cc5455998..452049677c75 100644 --- a/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.fail.cpp +++ b/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.fail.cpp @@ -16,11 +16,13 @@ #include <iterator> #include <cassert> -struct S { S(); }; // not constexpr +#include "test_macros.h" + +struct S { S(); }; // not constexpr int main() { -#if __cplusplus >= 201103L +#if TEST_STD_VER >= 11 { constexpr std::istream_iterator<S> it; } diff --git a/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.pass.cpp b/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.pass.cpp index bea07ec2272e..c1924e4b9272 100644 --- a/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.pass.cpp +++ b/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.pass.cpp @@ -16,15 +16,17 @@ #include <iterator> #include <cassert> +#include "test_macros.h" + int main() { { typedef std::istream_iterator<int> T; T it; assert(it == T()); -#if __cplusplus >= 201103L +#if TEST_STD_VER >= 11 constexpr T it2; #endif } - + } diff --git a/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.ops/arrow.pass.cpp b/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.ops/arrow.pass.cpp index 5c4ddcad32ea..30057a227c99 100644 --- a/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.ops/arrow.pass.cpp +++ b/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.ops/arrow.pass.cpp @@ -23,6 +23,8 @@ struct A int i_; }; +void operator&(A const&) {} + std::istream& operator>>(std::istream& is, A& a) { return is >> a.d_ >> a.i_; diff --git a/test/std/iterators/stream.iterators/istream.iterator/types.pass.cpp b/test/std/iterators/stream.iterators/istream.iterator/types.pass.cpp index 85a70a017976..1250e364d35e 100644 --- a/test/std/iterators/stream.iterators/istream.iterator/types.pass.cpp +++ b/test/std/iterators/stream.iterators/istream.iterator/types.pass.cpp @@ -9,6 +9,9 @@ // <iterator> +// Test fails due to use of is_trivially_* trait. +// XFAIL: gcc-4.9 + // template <class T, class charT = char, class traits = char_traits<charT>, // class Distance = ptrdiff_t> // class istream_iterator diff --git a/test/std/iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator.cons/default.pass.cpp b/test/std/iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator.cons/default.pass.cpp index 46ac390d931f..74aa6f2ab517 100644 --- a/test/std/iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator.cons/default.pass.cpp +++ b/test/std/iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator.cons/default.pass.cpp @@ -13,20 +13,22 @@ // // istreambuf_iterator() throw(); // -// All specializations of istreambuf_iterator shall have a trivial copy constructor, +// All specializations of istreambuf_iterator shall have a trivial copy constructor, // a constexpr default constructor and a trivial destructor. #include <iterator> #include <sstream> #include <cassert> +#include "test_macros.h" + int main() { { typedef std::istreambuf_iterator<char> T; T it; assert(it == T()); -#if __cplusplus >= 201103L +#if TEST_STD_VER >= 11 constexpr T it2; #endif } @@ -34,7 +36,7 @@ int main() typedef std::istreambuf_iterator<wchar_t> T; T it; assert(it == T()); -#if __cplusplus >= 201103L +#if TEST_STD_VER >= 11 constexpr T it2; #endif } diff --git a/test/std/iterators/stream.iterators/istreambuf.iterator/types.pass.cpp b/test/std/iterators/stream.iterators/istreambuf.iterator/types.pass.cpp index 2ad927cf952c..c974e2cd091d 100644 --- a/test/std/iterators/stream.iterators/istreambuf.iterator/types.pass.cpp +++ b/test/std/iterators/stream.iterators/istreambuf.iterator/types.pass.cpp @@ -9,6 +9,9 @@ // <iterator> +// Test fails due to use of is_trivially_* trait. +// XFAIL: gcc-4.9 + // template<class charT, class traits = char_traits<charT> > // class istreambuf_iterator // : public iterator<input_iterator_tag, charT, @@ -23,19 +26,23 @@ // typedef basic_istream<charT,traits> istream_type; // ... // -// All specializations of istreambuf_iterator shall have a trivial copy constructor, +// All specializations of istreambuf_iterator shall have a trivial copy constructor, // a constexpr default constructor and a trivial destructor. #include <iterator> #include <string> #include <type_traits> +#include "test_macros.h" + int main() { typedef std::istreambuf_iterator<char> I1; - static_assert((std::is_convertible<I1, - std::iterator<std::input_iterator_tag, char, std::char_traits<char>::off_type, - char*, char> >::value), ""); + static_assert((std::is_same<I1::iterator_category, std::input_iterator_tag>::value), ""); + static_assert((std::is_same<I1::value_type, char>::value), ""); + static_assert((std::is_same<I1::difference_type, std::char_traits<char>::off_type>::value), ""); + LIBCPP_STATIC_ASSERT((std::is_same<I1::pointer, char*>::value), ""); + static_assert((std::is_same<I1::reference, char>::value), ""); static_assert((std::is_same<I1::char_type, char>::value), ""); static_assert((std::is_same<I1::traits_type, std::char_traits<char> >::value), ""); static_assert((std::is_same<I1::int_type, I1::traits_type::int_type>::value), ""); @@ -46,9 +53,11 @@ int main() static_assert((std::is_trivially_destructible<I1>::value), "" ); typedef std::istreambuf_iterator<wchar_t> I2; - static_assert((std::is_convertible<I2, - std::iterator<std::input_iterator_tag, wchar_t, std::char_traits<wchar_t>::off_type, - wchar_t*, wchar_t> >::value), ""); + static_assert((std::is_same<I2::iterator_category, std::input_iterator_tag>::value), ""); + static_assert((std::is_same<I2::value_type, wchar_t>::value), ""); + static_assert((std::is_same<I2::difference_type, std::char_traits<wchar_t>::off_type>::value), ""); + LIBCPP_STATIC_ASSERT((std::is_same<I2::pointer, wchar_t*>::value), ""); + static_assert((std::is_same<I2::reference, wchar_t>::value), ""); static_assert((std::is_same<I2::char_type, wchar_t>::value), ""); static_assert((std::is_same<I2::traits_type, std::char_traits<wchar_t> >::value), ""); static_assert((std::is_same<I2::int_type, I2::traits_type::int_type>::value), ""); diff --git a/test/std/iterators/stream.iterators/ostream.iterator/ostream.iterator.cons.des/ostream.pass.cpp b/test/std/iterators/stream.iterators/ostream.iterator/ostream.iterator.cons.des/ostream.pass.cpp index 321cfbdb82c8..6366355cc108 100644 --- a/test/std/iterators/stream.iterators/ostream.iterator/ostream.iterator.cons.des/ostream.pass.cpp +++ b/test/std/iterators/stream.iterators/ostream.iterator/ostream.iterator.cons.des/ostream.pass.cpp @@ -17,9 +17,23 @@ #include <sstream> #include <cassert> +struct MyTraits : std::char_traits<char> {}; + +typedef std::basic_ostringstream<char, MyTraits> StringStream; +typedef std::basic_ostream<char, MyTraits> BasicStream; + +void operator&(BasicStream const&) {} + int main() { - std::ostringstream outf; - std::ostream_iterator<int> i(outf); - assert(outf.good()); + { + std::ostringstream outf; + std::ostream_iterator<int> i(outf); + assert(outf.good()); + } + { + StringStream outf; + std::ostream_iterator<int, char, MyTraits> i(outf); + assert(outf.good()); + } } diff --git a/test/std/iterators/stream.iterators/ostream.iterator/ostream.iterator.cons.des/ostream_delem.pass.cpp b/test/std/iterators/stream.iterators/ostream.iterator/ostream.iterator.cons.des/ostream_delim.pass.cpp index 8e5c771a4ab4..69c2dfc9b5f2 100644 --- a/test/std/iterators/stream.iterators/ostream.iterator/ostream.iterator.cons.des/ostream_delem.pass.cpp +++ b/test/std/iterators/stream.iterators/ostream.iterator/ostream.iterator.cons.des/ostream_delim.pass.cpp @@ -17,6 +17,14 @@ #include <sstream> #include <cassert> + +struct MyTraits : std::char_traits<char> {}; + +typedef std::basic_ostringstream<char, MyTraits> StringStream; +typedef std::basic_ostream<char, MyTraits> BasicStream; + +void operator&(BasicStream const&) {} + int main() { { @@ -29,4 +37,9 @@ int main() std::ostream_iterator<double, wchar_t> i(outf, L", "); assert(outf.good()); } + { + StringStream outf; + std::ostream_iterator<int, char, MyTraits> i(outf, ", "); + assert(outf.good()); + } } diff --git a/test/std/iterators/version.pass.cpp b/test/std/iterators/version.pass.cpp deleted file mode 100644 index dd097850388e..000000000000 --- a/test/std/iterators/version.pass.cpp +++ /dev/null @@ -1,20 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// <iterator> - -#include <iterator> - -#ifndef _LIBCPP_VERSION -#error _LIBCPP_VERSION not defined -#endif - -int main() -{ -} |