1 #ifndef YASLI_TRAITS_H_
2 #define YASLI_TRAITS_H_
4 // $Id: yasli_traits.h 754 2006-10-17 19:59:11Z syntheticpp $
12 template <bool b, class T = void>
16 struct enable_if<true, T> { typedef T type; };
20 //Used in place of enable_if:
21 //not so neat or so versitile but they do compile
22 template<bool condition, class if_true, class if_false>
25 typedef if_true result;
28 template<class if_true, class if_false>
29 struct type_selector<false, if_true, if_false>
31 typedef if_false result;
34 // Types for differentiating compile-time choices
35 typedef char (&yes_t)[1];
36 typedef char (&no_t)[2];
38 // Credit goes to Boost;
39 // also found in the C++ Templates book by Vandevoorde and Josuttis
41 //!! Wouldn't compile with these inside is_class
43 yes_t class_test(int U:: *);
47 template <class T> struct is_class
49 enum { value = (sizeof(class_test<T>(0)) == sizeof(yes_t)) };
52 template <typename T> struct is_pointer
54 enum { value = false };
57 template <typename T> struct is_pointer<T *>
59 enum { value = true };
62 template <typename T> struct is_memcopyable
64 enum { value = int(!is_class<T>::value) };
68 template <typename T> struct is_memmoveable
70 enum { value = int(!is_class<T>::value) };
77 } // namespace yasli_nstd
79 #endif // YASLI_TRAITS_H_