15a83710eSEric Fiselier //===----------------------------------------------------------------------===//
25a83710eSEric Fiselier //
357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65a83710eSEric Fiselier //
75a83710eSEric Fiselier //===----------------------------------------------------------------------===//
85a83710eSEric Fiselier
95a83710eSEric Fiselier // <iterator>
105a83710eSEric Fiselier
115a83710eSEric Fiselier // template<class T>
125a83710eSEric Fiselier // struct iterator_traits<T*>
135a83710eSEric Fiselier // {
145a83710eSEric Fiselier // typedef ptrdiff_t difference_type;
155a83710eSEric Fiselier // typedef T value_type;
165a83710eSEric Fiselier // typedef T* pointer;
175a83710eSEric Fiselier // typedef T& reference;
185a83710eSEric Fiselier // typedef random_access_iterator_tag iterator_category;
19*45d048c2SEric Fiselier // typedef contiguous_iterator_tag iterator_category; // C++20
205a83710eSEric Fiselier // };
215a83710eSEric Fiselier
225a83710eSEric Fiselier #include <iterator>
235a83710eSEric Fiselier #include <type_traits>
245a83710eSEric Fiselier
257fc6a556SMarshall Clow #include "test_macros.h"
267fc6a556SMarshall Clow
275a83710eSEric Fiselier struct A {};
285a83710eSEric Fiselier
main(int,char **)292df59c50SJF Bastien int main(int, char**)
305a83710eSEric Fiselier {
315a83710eSEric Fiselier typedef std::iterator_traits<A*> It;
325a83710eSEric Fiselier static_assert((std::is_same<It::difference_type, std::ptrdiff_t>::value), "");
335a83710eSEric Fiselier static_assert((std::is_same<It::value_type, A>::value), "");
345a83710eSEric Fiselier static_assert((std::is_same<It::pointer, A*>::value), "");
355a83710eSEric Fiselier static_assert((std::is_same<It::reference, A&>::value), "");
365a83710eSEric Fiselier static_assert((std::is_same<It::iterator_category, std::random_access_iterator_tag>::value), "");
37*45d048c2SEric Fiselier #if TEST_STD_VER > 17
38*45d048c2SEric Fiselier ASSERT_SAME_TYPE(It::iterator_concept, std::contiguous_iterator_tag);
39*45d048c2SEric Fiselier #endif
402df59c50SJF Bastien return 0;
415a83710eSEric Fiselier }
42