13 #if defined(__MINGW32__)
14 # define FORCE_INLINE inline
15 #elif defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 402)
16 # define FORCE_INLINE __attribute__((always_inline)) inline
17 #elif defined(_MSC_VER)
18 # define FORCE_INLINE __forceinline
20 # define FORCE_INLINE inline
23 namespace epics {
namespace pvData {
35 template<
typename T>
struct decorate_const<const T> {
typedef const T type; };
44 template<
typename T>
struct strip_const<const T> {
typedef T type; };
63 template<
typename A,
typename B,
typename R =
void>
69 template<
typename A,
typename B,
class R =
void>
struct same_root {};
70 template<
typename T,
class R>
struct same_root<T,T,R> {
typedef R type; };
71 template<
typename T,
class R>
struct same_root<const T,T,R> {
typedef R type; };
72 template<
typename T,
class R>
struct same_root<T,const T,R> {
typedef R type; };
80 template<
typename A,
typename B,
class R =
void>
struct _same_type {};
81 template<
typename T,
class R>
struct _same_type<T,T,R> {
typedef R type; };
85 template<
typename A,
typename B,
class R =
void>
88 typename detail::_has_const<B>::type,
104 template<
typename T,
class R =
void>
struct is_void {};
105 template<
class R>
struct is_void<void,R> {
typedef R type; };
106 template<
class R>
struct is_void<const void,R> {
typedef R type; };
109 template<
typename T,
class R =
void>
struct is_not_void {
typedef R type; };
114 template<
typename A,
typename B,
class EnableA =
void,
class EnableB =
void,
class R =
void>
116 template<
typename A,
typename B,
class R>
117 struct _and<A,B, typename A::type, typename B::type, R> {
typedef R type; };
126 #define SIMPLE_ARG_TYPE(TYPE) template<> struct arg_type<TYPE> { typedef TYPE type; };
127 SIMPLE_ARG_TYPE(
bool)
128 SIMPLE_ARG_TYPE(
char)
129 SIMPLE_ARG_TYPE(
signed char)
130 SIMPLE_ARG_TYPE(
unsigned char)
131 SIMPLE_ARG_TYPE(
short)
132 SIMPLE_ARG_TYPE(
unsigned short)
134 SIMPLE_ARG_TYPE(
unsigned int)
135 SIMPLE_ARG_TYPE(
long)
136 SIMPLE_ARG_TYPE(
unsigned long)
137 SIMPLE_ARG_TYPE(
long long)
138 SIMPLE_ARG_TYPE(
unsigned long long)
139 SIMPLE_ARG_TYPE(
float)
140 SIMPLE_ARG_TYPE(
double)
141 SIMPLE_ARG_TYPE(
long double)
142 #undef SIMPLE_ARG_TYPE
146 #endif // TEMPLATEMETA_H