1//===----------------------------------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is dual licensed under the MIT and the University of Illinois Open 6// Source Licenses. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10// <forward_list> 11 12// explicit forward_list(size_type n); 13// explicit forward_list(size_type n, const Alloc& a); 14 15#include <forward_list> 16#include <cassert> 17 18#include "DefaultOnly.h" 19#include "min_allocator.h" 20 21template <class T, class Allocator> 22void check_allocator(unsigned n, Allocator const &alloc = Allocator()) 23{ 24#if _LIBCPP_STD_VER > 11 25 typedef std::forward_list<T, Allocator> C; 26 C d(n, alloc); 27 assert(d.get_allocator() == alloc); 28 assert(std::distance(d.begin(), d.end()) == n); 29#endif 30} 31 32int main() 33{ 34 { 35 typedef DefaultOnly T; 36 typedef std::forward_list<T> C; 37 unsigned N = 10; 38 C c(N); 39 unsigned n = 0; 40 for (C::const_iterator i = c.begin(), e = c.end(); i != e; ++i, ++n) 41#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES 42 assert(*i == T()); 43#else 44 ; 45#endif 46 assert(n == N); 47 } 48#if __cplusplus >= 201103L 49 { 50 typedef DefaultOnly T; 51 typedef std::forward_list<T, min_allocator<T>> C; 52 unsigned N = 10; 53 C c(N); 54 unsigned n = 0; 55 for (C::const_iterator i = c.begin(), e = c.end(); i != e; ++i, ++n) 56#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES 57 assert(*i == T()); 58#else 59 ; 60#endif 61 assert(n == N); 62 check_allocator<T, min_allocator<T>> ( 0 ); 63 check_allocator<T, min_allocator<T>> ( 3 ); 64 } 65#endif 66} 67