Chromium Code Reviews| Index: base/template_util.h |
| diff --git a/base/template_util.h b/base/template_util.h |
| index 30572f1635857bc9a9c21da19500ca3ef90283ae..f4bf7461327bcb076bbe4bbf30bdd405f9bf3234 100644 |
| --- a/base/template_util.h |
| +++ b/base/template_util.h |
| @@ -28,6 +28,39 @@ typedef integral_constant<bool, false> false_type; |
| template <class T> struct is_pointer : false_type {}; |
| template <class T> struct is_pointer<T*> : true_type {}; |
| +// Member function pointer detection up to four params. Add more as needed |
|
Jeffrey Yasskin
2013/12/04 20:00:12
There's a more complicated technique to detect arb
|
| +// below. This is built-in to C++ 11, and we can remove this when we switch. |
| +template<typename T> |
| +struct is_member_function_pointer : false_type {}; |
| + |
| +template <typename R, typename Z> |
| +struct is_member_function_pointer<R(Z::*)()> : true_type {}; |
| +template <typename R, typename Z> |
| +struct is_member_function_pointer<R(Z::*)() const> : true_type {}; |
| + |
| +template <typename R, typename Z, typename A> |
| +struct is_member_function_pointer<R(Z::*)(A)> : true_type {}; |
| +template <typename R, typename Z, typename A> |
| +struct is_member_function_pointer<R(Z::*)(A) const> : true_type {}; |
| + |
| +template <typename R, typename Z, typename A, typename B> |
| +struct is_member_function_pointer<R(Z::*)(A, B)> : true_type {}; |
| +template <typename R, typename Z, typename A, typename B> |
| +struct is_member_function_pointer<R(Z::*)(A, B) const> : true_type {}; |
| + |
| +template <typename R, typename Z, typename A, typename B, typename C> |
| +struct is_member_function_pointer<R(Z::*)(A, B, C)> : true_type {}; |
| +template <typename R, typename Z, typename A, typename B, typename C> |
| +struct is_member_function_pointer<R(Z::*)(A, B, C) const> : true_type {}; |
| + |
| +template <typename R, typename Z, typename A, typename B, typename C, |
| + typename D> |
| +struct is_member_function_pointer<R(Z::*)(A, B, C, D)> : true_type {}; |
| +template <typename R, typename Z, typename A, typename B, typename C, |
| + typename D> |
| +struct is_member_function_pointer<R(Z::*)(A, B, C, D) const> : true_type {}; |
| + |
| + |
| template <class T, class U> struct is_same : public false_type {}; |
| template <class T> struct is_same<T,T> : true_type {}; |