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 + -
显示快捷键?