test_function.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 82 行

CPP
82
字号
//  (C) Copyright John Maddock 2005.//  Use, modification and distribution are subject to the//  Boost Software License, Version 1.0. (See accompanying file//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)#ifdef TEST_STD_HEADERS#include <functional>#else#include <boost/tr1/functional.hpp>#endif#include <boost/static_assert.hpp>#include <boost/type_traits/is_base_and_derived.hpp>#include "verify_return.hpp"struct test_functor{   int operator()()const;   long operator()(int)const;   double operator()(int, char)const;};void nothing(){}template <class Func>void test_function(Func*){   typedef typename Func::result_type result_type;      test_functor t;   Func f1;   Func f2(0);   Func f3(f1);   Func f4(t);   f2 = f1;   f2 = 0;   f2 = t;   f2 = std::tr1::ref(t);   f2 = std::tr1::cref(t);   const Func& cf = f1;   std::tr1::swap(f1, f2);   if(cf) nothing();   if(cf && f2) nothing();   if(cf || f2) nothing();   if(f2 && !cf) nothing();   //const std::type_info& info = cf.target_type();   test_functor* func1 = f1.template target<test_functor>();   const test_functor* func2 = cf.template target<test_functor>();   // comparison with null:   if(0 == f1) nothing();   if(0 != f1) nothing();   if(f2 == 0) nothing();   if(f2 != 0) nothing();}int main(){   BOOST_STATIC_ASSERT((::boost::is_base_and_derived<std::exception, std::tr1::bad_function_call>::value));   std::tr1::bad_function_call fe;   test_function(static_cast<std::tr1::function<int (void)>* >(0));   test_function(static_cast<std::tr1::function<long (int)>* >(0));   test_function(static_cast<std::tr1::function<double (int,char)>* >(0));   std::tr1::function<int (void)> f1;   verify_return_type(f1(), int(0));   std::tr1::function<long (int)> f2;   verify_return_type(f2(0), long(0));   std::tr1::function<double (int, char)> f3;   verify_return_type(f3(0,0), double(0));   //BOOST_STATIC_ASSERT((::boost::is_base_and_derived<std::unary_function<int, long>, std::tr1::function<long (int)> >::value));   //BOOST_STATIC_ASSERT((::boost::is_base_and_derived<std::binary_function<int, char, double>, std::tr1::function<double (int,char)> >::value));   return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?