diff options
Diffstat (limited to 'libcxx/test/std/iterators/iterator.primitives/iterator.basic')
| -rw-r--r-- | libcxx/test/std/iterators/iterator.primitives/iterator.basic/iterator.pass.cpp | 82 | 
1 files changed, 82 insertions, 0 deletions
| diff --git a/libcxx/test/std/iterators/iterator.primitives/iterator.basic/iterator.pass.cpp b/libcxx/test/std/iterators/iterator.primitives/iterator.basic/iterator.pass.cpp new file mode 100644 index 00000000000..26d5c866028 --- /dev/null +++ b/libcxx/test/std/iterators/iterator.primitives/iterator.basic/iterator.pass.cpp @@ -0,0 +1,82 @@ +//===----------------------------------------------------------------------===// +// +//                     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> + +// template<class Category, class T, class Distance = ptrdiff_t, +//          class Pointer = T*, class Reference = T&> +// struct iterator +// { +//   typedef T         value_type; +//   typedef Distance  difference_type; +//   typedef Pointer   pointer; +//   typedef Reference reference; +//   typedef Category  iterator_category; +// }; + +#include <iterator> +#include <type_traits> + +struct A {}; + +template <class T> +void +test2() +{ +    typedef std::iterator<std::forward_iterator_tag, T> It; +    static_assert((std::is_same<typename It::value_type, T>::value), ""); +    static_assert((std::is_same<typename It::difference_type, std::ptrdiff_t>::value), ""); +    static_assert((std::is_same<typename It::pointer, T*>::value), ""); +    static_assert((std::is_same<typename It::reference, T&>::value), ""); +    static_assert((std::is_same<typename It::iterator_category, std::forward_iterator_tag>::value), ""); +} + +template <class T> +void +test3() +{ +    typedef std::iterator<std::bidirectional_iterator_tag, T, short> It; +    static_assert((std::is_same<typename It::value_type, T>::value), ""); +    static_assert((std::is_same<typename It::difference_type, short>::value), ""); +    static_assert((std::is_same<typename It::pointer, T*>::value), ""); +    static_assert((std::is_same<typename It::reference, T&>::value), ""); +    static_assert((std::is_same<typename It::iterator_category, std::bidirectional_iterator_tag>::value), ""); +} + +template <class T> +void +test4() +{ +    typedef std::iterator<std::random_access_iterator_tag, T, int, const T*> It; +    static_assert((std::is_same<typename It::value_type, T>::value), ""); +    static_assert((std::is_same<typename It::difference_type, int>::value), ""); +    static_assert((std::is_same<typename It::pointer, const T*>::value), ""); +    static_assert((std::is_same<typename It::reference, T&>::value), ""); +    static_assert((std::is_same<typename It::iterator_category, std::random_access_iterator_tag>::value), ""); +} + +template <class T> +void +test5() +{ +    typedef std::iterator<std::input_iterator_tag, T, long, const T*, const T&> It; +    static_assert((std::is_same<typename It::value_type, T>::value), ""); +    static_assert((std::is_same<typename It::difference_type, long>::value), ""); +    static_assert((std::is_same<typename It::pointer, const T*>::value), ""); +    static_assert((std::is_same<typename It::reference, const T&>::value), ""); +    static_assert((std::is_same<typename It::iterator_category, std::input_iterator_tag>::value), ""); +} + +int main() +{ +    test2<A>(); +    test3<A>(); +    test4<A>(); +    test5<A>(); +} | 

