Packets/80221Bundle: added more MIH-TLVs
[senf.git] / senf / Utils / type_traits.hh
index a728ac0..910b4e4 100644 (file)
@@ -243,6 +243,45 @@ namespace senf
         : public boost::remove_cv< typename boost::remove_reference<T>::type >
     {};
 
+    /** \brief Get arity of function T
+
+        \a T may be any function like type: function, pointer to function or (pointer to)
+        member-function.
+
+        \code
+        BOOST_STATIC_ASSERT(( senf::function_arity<void (Class::*)(int)>::value == 1 ));
+        \endcode
+     */
+    template < class T >
+    struct function_arity
+        : public boost::integral_constant<
+              unsigned,
+              boost::function_traits<
+                  typename senf::remove_any_pointer<T>::type>::arity>
+    {};
+
+    /** Test object if it is any \c std::pair type
+
+        if \a Pair is any \c std::pair type, this trait will inherit from \c boost::true_type,
+        otherwise it will inherit from \c boost::false_type.
+
+        \code
+        BOOST_STATIC_ASSERT((   senf::is_pair< std::pair<int,void*> >::value ));
+        BOOST_STATIC_ASSERT(( ! senf::is_pair< void () >::value ));
+        \endcode
+     */
+    template <class Pair>
+    struct is_pair
+        : public boost::false_type
+    {};
+
+#ifndef DOXYGEN
+    template <class First, class Second>
+    struct is_pair< std::pair<First,Second> >
+        : public boost::true_type
+    {};
+#endif
+
   ///}
 
 #ifndef DOXYGEN
@@ -261,8 +300,8 @@ namespace senf
 //#include "type_traits.ct"
 //#include "type_traits.cti"
 #endif
-\f
 
+\f
 // Local Variables:
 // mode: c++
 // fill-column: 100