aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/bits/cpp_type_traits.h
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2010-05-27 17:37:11 +0000
committerPaolo Carlini <paolo.carlini@oracle.com>2010-05-27 17:37:11 +0000
commit9dc79e8ed25c7dced2347f079221613e62d04692 (patch)
treef449730c6e302a946c5d8cb6a9822be36cca98a0 /libstdc++-v3/include/bits/cpp_type_traits.h
parentecb139b68f537045a4d0c5e9d68b306566758a95 (diff)
2010-05-27 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/40497 * include/bits/cpp_type_traits.h (__is_iterator): Add. * include/bits/stl_iterator_base_funcs.h (next, prev): Use it. * testsuite/24_iterators/operations/40497.cc: New. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@159933 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/bits/cpp_type_traits.h')
-rw-r--r--libstdc++-v3/include/bits/cpp_type_traits.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/libstdc++-v3/include/bits/cpp_type_traits.h b/libstdc++-v3/include/bits/cpp_type_traits.h
index 0d7b9ff09fc..8c5d8e9ca27 100644
--- a/libstdc++-v3/include/bits/cpp_type_traits.h
+++ b/libstdc++-v3/include/bits/cpp_type_traits.h
@@ -414,6 +414,34 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
};
#endif
+ template<typename _Tp>
+ class __is_iterator_helper
+ {
+ typedef char __one;
+ typedef struct { char __arr[2]; } __two;
+
+ template<typename _Up>
+ struct _Wrap_type
+ { };
+
+ template<typename _Up>
+ static __one __test(_Wrap_type<typename _Up::iterator_category>*);
+
+ template<typename _Up>
+ static __two __test(...);
+
+ public:
+ static const bool __value = (sizeof(__test<_Tp>(0)) == 1
+ || __is_pointer<_Tp>::__value);
+ };
+
+ template<typename _Tp>
+ struct __is_iterator
+ {
+ enum { __value = __is_iterator_helper<_Tp>::__value };
+ typedef typename __truth_type<__value>::__type __type;
+ };
+
_GLIBCXX_END_NAMESPACE
#endif //_CPP_TYPE_TRAITS_H