diff --git a/libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/fill_n.pass.cpp b/libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/fill_n.pass.cpp --- a/libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/fill_n.pass.cpp +++ b/libcxx/test/std/algorithms/alg.modifying.operations/alg.fill/fill_n.pass.cpp @@ -35,13 +35,24 @@ typedef UserDefinedIntegral UDI; +template +typename std::enable_if::value, bool>::type equal(Iter& it, Ptr ptr) { + return it.base() == ptr; +} + +template +bool equal(Ptr it, Ptr ptr) { + return it == ptr; +} + template void test_char() { const unsigned n = 4; char ca[n] = {0}; - assert(std::fill_n(Iter(ca), UDI(n), char(1)) == std::next(Iter(ca), n)); + Iter it = std::fill_n(Iter(ca), UDI(n), char(1)); + assert(equal(it, ca + n)); assert(ca[0] == 1); assert(ca[1] == 1); assert(ca[2] == 1); @@ -54,7 +65,8 @@ { const unsigned n = 4; int ia[n] = {0}; - assert(std::fill_n(Iter(ia), UDI(n), 1) == std::next(Iter(ia), n)); + Iter it = std::fill_n(Iter(ia), UDI(n), 1); + assert(equal(it, ia + n)); assert(ia[0] == 1); assert(ia[1] == 1); assert(ia[2] == 1); @@ -66,7 +78,7 @@ { const unsigned n = 4; int ia[n] = {0}; - assert(std::fill_n(ia, UDI(n), static_cast(1)) == std::next(ia, n)); + assert(std::fill_n(ia, UDI(n), static_cast(1)) == ia + 4); assert(ia[0] == 1); assert(ia[1] == 1); assert(ia[2] == 1); @@ -85,7 +97,7 @@ { const unsigned n = 4; int ia[n] = {0}; - assert(std::fill_n(ia, UDI(n), source()) == std::next(ia, n)); + assert(std::fill_n(ia, UDI(n), source()) == ia + 4); assert(ia[0] == 0); assert(ia[1] == 1); assert(ia[2] == 2); @@ -103,7 +115,7 @@ { const unsigned n = 4; test1 test1a[n] = {0}; - assert(std::fill_n(test1a, UDI(n), static_cast(10)) == std::next(test1a, n)); + assert(std::fill_n(test1a, UDI(n), static_cast(10)) == test1a + n); assert(test1a[0].c == 11); assert(test1a[1].c == 11); assert(test1a[2].c == 11); @@ -150,11 +162,13 @@ int main(int, char**) { + test_char >(); test_char >(); test_char >(); test_char >(); test_char(); + test_int >(); test_int >(); test_int >(); test_int >();