summaryrefslogtreecommitdiff
path: root/test/std/iterators
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2016-07-23 20:47:26 +0000
committerDimitry Andric <dim@FreeBSD.org>2016-07-23 20:47:26 +0000
commit51072bd6bf79ef2bc6a922079bff57c31c1effbc (patch)
tree91a2effbc9e6f80bdbbf9eb70e06c51ad0867ea0 /test/std/iterators
parentbb5e33f003797b67974a8893f7f2930fc51b8210 (diff)
Notes
Diffstat (limited to 'test/std/iterators')
-rw-r--r--test/std/iterators/iterator.container/data.pass.cpp10
-rw-r--r--test/std/iterators/iterator.container/empty.pass.cpp10
-rw-r--r--test/std/iterators/iterator.container/size.pass.cpp10
-rw-r--r--test/std/iterators/iterator.primitives/std.iterator.tags/bidirectional_iterator_tag.pass.cpp1
-rw-r--r--test/std/iterators/iterator.primitives/std.iterator.tags/forward_iterator_tag.pass.cpp1
-rw-r--r--test/std/iterators/iterator.primitives/std.iterator.tags/input_iterator_tag.pass.cpp1
-rw-r--r--test/std/iterators/iterator.primitives/std.iterator.tags/output_iterator_tag.pass.cpp1
-rw-r--r--test/std/iterators/iterator.primitives/std.iterator.tags/random_access_iterator_tag.pass.cpp1
-rw-r--r--test/std/iterators/iterator.range/begin-end.pass.cpp10
-rw-r--r--test/std/iterators/predef.iterators/insert.iterators/back.insert.iterator/types.pass.cpp4
-rw-r--r--test/std/iterators/predef.iterators/insert.iterators/front.insert.iterator/types.pass.cpp4
-rw-r--r--test/std/iterators/predef.iterators/insert.iterators/insert.iterator/types.pass.cpp4
-rw-r--r--test/std/iterators/predef.iterators/move.iterators/move.iterator/types.pass.cpp45
-rw-r--r--test/std/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.make/make_reverse_iterator.pass.cpp7
-rw-r--r--test/std/iterators/predef.iterators/reverse.iterators/reverse.iter.ops/reverse.iter.opref/op_arrow.pass.cpp6
-rw-r--r--test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.fail.cpp6
-rw-r--r--test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.pass.cpp6
-rw-r--r--test/std/iterators/stream.iterators/istream.iterator/istream.iterator.ops/arrow.pass.cpp2
-rw-r--r--test/std/iterators/stream.iterators/istream.iterator/types.pass.cpp3
-rw-r--r--test/std/iterators/stream.iterators/istreambuf.iterator/istreambuf.iterator.cons/default.pass.cpp8
-rw-r--r--test/std/iterators/stream.iterators/istreambuf.iterator/types.pass.cpp23
-rw-r--r--test/std/iterators/stream.iterators/ostream.iterator/ostream.iterator.cons.des/ostream.pass.cpp20
-rw-r--r--test/std/iterators/stream.iterators/ostream.iterator/ostream.iterator.cons.des/ostream_delim.pass.cpp (renamed from test/std/iterators/stream.iterators/ostream.iterator/ostream.iterator.cons.des/ostream_delem.pass.cpp)13
-rw-r--r--test/std/iterators/version.pass.cpp20
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()
-{
-}