Utils: Add senf::is_pair trait
g0dil [Thu, 8 Oct 2009 09:20:57 +0000 (09:20 +0000)]
git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1479 270642c3-0616-0410-b53a-bc976706d245

senf/Utils/type_traits.hh
senf/Utils/type_traits.test.cc

index f3e5811..910b4e4 100644 (file)
@@ -260,6 +260,28 @@ namespace senf
                   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
index fb9fe5f..9b1c3ab 100644 (file)
@@ -110,6 +110,11 @@ BOOST_AUTO_UNIT_TEST(typeTraits)
     BOOST_STATIC_ASSERT(( senf::function_arity<void (*)(int,int)>::value == 2 ));
     BOOST_STATIC_ASSERT(( senf::function_arity<void (Class::*)()>::value == 0 ));
     BOOST_STATIC_ASSERT(( senf::function_arity<void (Class::*)(int,int)>::value == 2 ));
+
+    BOOST_STATIC_ASSERT(( senf::function_arity<void (Class::*)(int)>::value == 1 ));
+
+    BOOST_STATIC_ASSERT((   senf::is_pair< std::pair<int,void*> >::value ));
+    BOOST_STATIC_ASSERT(( ! senf::is_pair< void () >::value ));
 }
 
 ///////////////////////////////cc.e////////////////////////////////////////