/* TAGS: c++ */ /* VERIFY_OPTS: -o nofail:malloc */ //===----------------------------------------------------------------------===// // // 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. // //===----------------------------------------------------------------------===// // // forward_list(const forward_list& x); #include #include #include #include "test_allocator.h" #include "min_allocator.h" int main() { { typedef int T; typedef test_allocator A; typedef std::forward_list C; const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; C c0(std::begin(t), std::end(t), A(10)); C c = c0; unsigned n = 0; for (C::const_iterator i = c.begin(), e = c.end(); i != e; ++i, ++n) assert(*i == n); assert(n == std::end(t) - std::begin(t)); assert(c == c0); assert(c.get_allocator() == A(10)); } #ifndef _LIBCPP_HAS_NO_ADVANCED_SFINAE { typedef int T; typedef other_allocator A; typedef std::forward_list C; const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; C c0(std::begin(t), std::end(t), A(10)); C c = c0; unsigned n = 0; for (C::const_iterator i = c.begin(), e = c.end(); i != e; ++i, ++n) assert(*i == n); assert(n == std::end(t) - std::begin(t)); assert(c == c0); assert(c.get_allocator() == A(-2)); } #endif // _LIBCPP_HAS_NO_ADVANCED_SFINAE #if __cplusplus >= 201103L { typedef int T; typedef min_allocator A; typedef std::forward_list C; const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; C c0(std::begin(t), std::end(t), A()); C c = c0; unsigned n = 0; for (C::const_iterator i = c.begin(), e = c.end(); i != e; ++i, ++n) assert(*i == n); assert(n == std::end(t) - std::begin(t)); assert(c == c0); assert(c.get_allocator() == A()); } #endif }