VCCC  2024.05
VisualCamp Common C++ library
forward_declare.hpp
Go to the documentation of this file.
1 //
2 // Created by yonggyulee on 2023/12/25.
3 //
4 
5 #ifndef VCCC_ITERATOR_ITERATOR_TRAITS_FORWARD_DECLARE_HPP_
6 #define VCCC_ITERATOR_ITERATOR_TRAITS_FORWARD_DECLARE_HPP_
7 
8 #if __cplusplus >= 202002L
9 #include <iterator>
10 #endif
11 #include <type_traits>
12 
14 
15 namespace vccc {
16 
17 template<typename Iter>
18 struct cxx20_iterator_traits;
19 
20 namespace detail {
21 
22 template<typename T>
23 struct is_primary_iterator_traits;
24 
25 // std::iterator_traits
26 
27 template<typename T> struct is_primary_iterator_traits< std::iterator_traits<T> > : std::true_type {};
28 template<typename T> struct is_primary_iterator_traits< std::iterator_traits<T*> > : std::false_type {};
29 #if __cplusplus >= 202002L
30 template<typename I>
31 struct is_primary_iterator_traits<std::iterator_traits< std::counted_iterator<I> >> : is_primary_iterator_traits<I> {};
32 template<typename I, typename S>
33 struct is_primary_iterator_traits<std::iterator_traits< std::common_iterator<I, S> >> : std::false_type {};
34 #endif
35 
36 
37 // vccc::cxx20_iterator_traits
38 
39 template<typename T> struct is_primary_iterator_traits< cxx20_iterator_traits<T> > : std::true_type {};
40 template<typename T> struct is_primary_iterator_traits< cxx20_iterator_traits<T*> > : std::false_type {};
41 
42 #if __cplusplus >= 202002L
43 template<typename I>
44 struct is_primary_iterator_traits<cxx20_iterator_traits< std::counted_iterator<I> >> : is_primary_iterator_traits<I> {};
45 template<typename I, typename S>
46 struct is_primary_iterator_traits<cxx20_iterator_traits< std::common_iterator<I, S> >> : std::false_type {};
47 #endif
48 
49 } // namespace detail
50 
51 } // namespace vccc
52 
53 #endif // VCCC_ITERATOR_ITERATOR_TRAITS_FORWARD_DECLARE_HPP_
Definition: matrix.hpp:495
Definition: directory.h:12