blob: 6de6c1a1887e3179838d2c6e307bb0c65f786216 [file] [log] [blame]
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001//===----------------------------------------------------------------------===//
2//
Howard Hinnantf5256e12010-05-11 21:36:01 +00003// The LLVM Compiler Infrastructure
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00004//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <iterator>
11
12// move_iterator
13
14// Test nested types:
15
Howard Hinnant712522c2010-08-22 00:29:01 +000016// template <InputIterator Iter>
17// class move_iterator {
18// public:
19// typedef Iter iterator_type;
20// typedef Iter::difference_type difference_type;
21// typedef Iterator pointer;
22// typedef Iter::value_type value_type;
23// typedef value_type&& reference;
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000024// };
25
26#include <iterator>
27#include <type_traits>
28
29#include "../../../iterators.h"
30
31template <class It>
32void
33test()
34{
35 typedef std::move_iterator<It> R;
36 typedef std::iterator_traits<It> T;
37 static_assert((std::is_same<typename R::iterator_type, It>::value), "");
38 static_assert((std::is_same<typename R::difference_type, typename T::difference_type>::value), "");
39 static_assert((std::is_same<typename R::pointer, typename T::pointer>::value), "");
40 static_assert((std::is_same<typename R::value_type, typename T::value_type>::value), "");
Howard Hinnant73d21a42010-09-04 23:28:19 +000041#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000042 static_assert((std::is_same<typename R::reference, typename R::value_type&&>::value), "");
43#else
44 static_assert((std::is_same<typename R::reference, typename T::reference>::value), "");
45#endif
46 static_assert((std::is_same<typename R::iterator_category, typename T::iterator_category>::value), "");
47}
48
49int main()
50{
51 test<input_iterator<char*> >();
52 test<forward_iterator<char*> >();
53 test<bidirectional_iterator<char*> >();
54 test<random_access_iterator<char*> >();
55 test<char*>();
56}