1 #ifndef _STLP_PTRS_SPECIALIZE_H
2 # define _STLP_PTRS_SPECIALIZE_H
4 // the following is a workaround for arrow operator problems
5 # if defined ( _STLP_NO_ARROW_OPERATOR )
6 // User wants to disable proxy -> operators
7 # define _STLP_DEFINE_ARROW_OPERATOR
8 # define _STLP_ARROW_SPECIALIZE_WITH_PTRS(_Tp)
10 // Compiler can handle generic -> operator.
11 # define _STLP_ARROW_SPECIALIZE_WITH_PTRS(_Tp)
13 # define _STLP_DEFINE_ARROW_OPERATOR pointer operator->() const { return &(*(*this)); }
14 # elif defined ( _STLP_WINCE ) || defined(__WATCOMC__)
15 # define _STLP_DEFINE_ARROW_OPERATOR pointer operator->() const { reference x = operator*(); return &x; }
17 # define _STLP_DEFINE_ARROW_OPERATOR pointer operator->() const { return &(operator*()); }
19 # endif /* _STLP_NO_ARROW_OPERATOR */
21 // Important pointers specializations
23 # ifdef _STLP_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS
24 # define _STLP_TYPE_TRAITS_POD_SPECIALIZE_V(_Type)
25 # define _STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type)
27 # define _STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type) _STLP_TEMPLATE_NULL struct __type_traits<_Type> : __type_traits_aux<true> {};
28 # define _STLP_TYPE_TRAITS_POD_SPECIALIZE_V(_Type) \
29 _STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type*) \
30 _STLP_TYPE_TRAITS_POD_SPECIALIZE(const _Type*) \
31 _STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type**) \
32 _STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type* const *) \
33 _STLP_TYPE_TRAITS_POD_SPECIALIZE(const _Type**) \
34 _STLP_TYPE_TRAITS_POD_SPECIALIZE(_Type***) \
35 _STLP_TYPE_TRAITS_POD_SPECIALIZE(const _Type***)
38 # define _STLP_POINTERS_SPECIALIZE(_Type) _STLP_TYPE_TRAITS_POD_SPECIALIZE_V(_Type) _STLP_ARROW_SPECIALIZE_WITH_PTRS(_Type)
40 # if !defined ( _STLP_NO_BOOL )
41 _STLP_POINTERS_SPECIALIZE( bool )
43 _STLP_TYPE_TRAITS_POD_SPECIALIZE_V(void)
44 # ifndef _STLP_NO_SIGNED_BUILTINS
45 _STLP_POINTERS_SPECIALIZE( signed char )
47 _STLP_POINTERS_SPECIALIZE( char )
48 _STLP_POINTERS_SPECIALIZE( unsigned char )
49 _STLP_POINTERS_SPECIALIZE( short )
50 _STLP_POINTERS_SPECIALIZE( unsigned short )
51 _STLP_POINTERS_SPECIALIZE( int )
52 _STLP_POINTERS_SPECIALIZE( unsigned int )
53 _STLP_POINTERS_SPECIALIZE( long )
54 _STLP_POINTERS_SPECIALIZE( unsigned long )
55 _STLP_POINTERS_SPECIALIZE( float )
56 _STLP_POINTERS_SPECIALIZE( double )
57 # if !defined ( _STLP_NO_LONG_DOUBLE )
58 _STLP_POINTERS_SPECIALIZE( long double )
60 # if defined ( _STLP_LONG_LONG)
61 _STLP_POINTERS_SPECIALIZE( _STLP_LONG_LONG )
62 _STLP_POINTERS_SPECIALIZE( unsigned _STLP_LONG_LONG )
64 #if defined ( _STLP_HAS_WCHAR_T ) && ! defined (_STLP_WCHAR_T_IS_USHORT)
65 _STLP_POINTERS_SPECIALIZE( wchar_t )
68 # undef _STLP_ARROW_SPECIALIZE
69 # undef _STLP_ARROW_SPECIALIZE_WITH_PTRS
70 # undef _STLP_TYPE_TRAITS_POD_SPECIALIZE_V