indirect_traits_test.cpp

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

CPP
118
字号
// Copyright David Abrahams 2004. Distributed under 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)//#include <stdio.h>#define BOOST_ENABLE_ASSERT_HANDLER#include <boost/assert.hpp>#include <boost/type_traits/is_member_function_pointer.hpp>#include <boost/mpl/assert.hpp>#include <boost/python/detail/indirect_traits.hpp>#include <boost/mpl/assert.hpp>//#define print(expr) printf("%s ==> %s\n", #expr, expr)// not all the compilers can handle an incomplete class type here.struct X {};using namespace boost::python::indirect_traits;typedef void (X::*pmf)();BOOST_MPL_ASSERT((is_reference_to_function<int (&)()>));BOOST_MPL_ASSERT_NOT((is_reference_to_function<int (*)()>));BOOST_MPL_ASSERT_NOT((is_reference_to_function<int&>));BOOST_MPL_ASSERT_NOT((is_reference_to_function<pmf>));    BOOST_MPL_ASSERT_NOT((is_pointer_to_function<int (&)()>));BOOST_MPL_ASSERT((is_pointer_to_function<int (*)()>));BOOST_MPL_ASSERT_NOT((is_pointer_to_function<int (*&)()>));BOOST_MPL_ASSERT_NOT((is_pointer_to_function<int (*const&)()>));BOOST_MPL_ASSERT_NOT((is_pointer_to_function<pmf>));    BOOST_MPL_ASSERT_NOT((is_reference_to_function_pointer<int (&)()>));BOOST_MPL_ASSERT_NOT((is_reference_to_function_pointer<int (*)()>));BOOST_MPL_ASSERT_NOT((is_reference_to_function_pointer<int&>));BOOST_MPL_ASSERT((is_reference_to_function_pointer<int (*&)()>));BOOST_MPL_ASSERT((is_reference_to_function_pointer<int (*const&)()>));BOOST_MPL_ASSERT_NOT((is_reference_to_function_pointer<pmf>));BOOST_MPL_ASSERT((is_reference_to_pointer<int*&>));BOOST_MPL_ASSERT((is_reference_to_pointer<int* const&>));BOOST_MPL_ASSERT((is_reference_to_pointer<int*volatile&>));BOOST_MPL_ASSERT((is_reference_to_pointer<int*const volatile&>));BOOST_MPL_ASSERT((is_reference_to_pointer<int const*&>));BOOST_MPL_ASSERT((is_reference_to_pointer<int const* const&>));BOOST_MPL_ASSERT((is_reference_to_pointer<int const*volatile&>));BOOST_MPL_ASSERT((is_reference_to_pointer<int const*const volatile&>));BOOST_MPL_ASSERT_NOT((is_reference_to_pointer<pmf>));BOOST_MPL_ASSERT_NOT((is_reference_to_pointer<int const volatile>));BOOST_MPL_ASSERT_NOT((is_reference_to_pointer<int>));BOOST_MPL_ASSERT_NOT((is_reference_to_pointer<int*>));BOOST_MPL_ASSERT_NOT((is_reference_to_const<int*&>));BOOST_MPL_ASSERT((is_reference_to_const<int* const&>));BOOST_MPL_ASSERT_NOT((is_reference_to_const<int*volatile&>));BOOST_MPL_ASSERT((is_reference_to_const<int*const volatile&>));    BOOST_MPL_ASSERT_NOT((is_reference_to_const<int const volatile>));BOOST_MPL_ASSERT_NOT((is_reference_to_const<int>));BOOST_MPL_ASSERT_NOT((is_reference_to_const<int*>));BOOST_MPL_ASSERT((is_reference_to_non_const<int*&>));BOOST_MPL_ASSERT_NOT((is_reference_to_non_const<int* const&>));BOOST_MPL_ASSERT((is_reference_to_non_const<int*volatile&>));BOOST_MPL_ASSERT_NOT((is_reference_to_non_const<int*const volatile&>));    BOOST_MPL_ASSERT_NOT((is_reference_to_non_const<int const volatile>));BOOST_MPL_ASSERT_NOT((is_reference_to_non_const<int>));BOOST_MPL_ASSERT_NOT((is_reference_to_non_const<int*>));    BOOST_MPL_ASSERT_NOT((is_reference_to_volatile<int*&>));BOOST_MPL_ASSERT_NOT((is_reference_to_volatile<int* const&>));BOOST_MPL_ASSERT((is_reference_to_volatile<int*volatile&>));BOOST_MPL_ASSERT((is_reference_to_volatile<int*const volatile&>));    BOOST_MPL_ASSERT_NOT((is_reference_to_volatile<int const volatile>));BOOST_MPL_ASSERT_NOT((is_reference_to_volatile<int>));BOOST_MPL_ASSERT_NOT((is_reference_to_volatile<int*>));namespace tt = boost::python::indirect_traits;BOOST_MPL_ASSERT_NOT((tt::is_reference_to_class<int>));BOOST_MPL_ASSERT_NOT((tt::is_reference_to_class<int&>));BOOST_MPL_ASSERT_NOT((tt::is_reference_to_class<int*>));    BOOST_MPL_ASSERT_NOT((tt::is_reference_to_class<pmf>));BOOST_MPL_ASSERT_NOT((tt::is_reference_to_class<pmf const&>));    BOOST_MPL_ASSERT_NOT((tt::is_reference_to_class<X>));BOOST_MPL_ASSERT((tt::is_reference_to_class<X&>));BOOST_MPL_ASSERT((tt::is_reference_to_class<X const&>));BOOST_MPL_ASSERT((tt::is_reference_to_class<X volatile&>));BOOST_MPL_ASSERT((tt::is_reference_to_class<X const volatile&>));    BOOST_MPL_ASSERT_NOT((is_pointer_to_class<int>));BOOST_MPL_ASSERT_NOT((is_pointer_to_class<int*>));BOOST_MPL_ASSERT_NOT((is_pointer_to_class<int&>));    BOOST_MPL_ASSERT_NOT((is_pointer_to_class<X>));BOOST_MPL_ASSERT_NOT((is_pointer_to_class<X&>));BOOST_MPL_ASSERT_NOT((is_pointer_to_class<pmf>));BOOST_MPL_ASSERT_NOT((is_pointer_to_class<pmf const>));BOOST_MPL_ASSERT((is_pointer_to_class<X*>));BOOST_MPL_ASSERT((is_pointer_to_class<X const*>));BOOST_MPL_ASSERT((is_pointer_to_class<X volatile*>));BOOST_MPL_ASSERT((is_pointer_to_class<X const volatile*>));BOOST_MPL_ASSERT((tt::is_reference_to_member_function_pointer<pmf&>));BOOST_MPL_ASSERT((tt::is_reference_to_member_function_pointer<pmf const&>));BOOST_MPL_ASSERT((tt::is_reference_to_member_function_pointer<pmf volatile&>));BOOST_MPL_ASSERT((tt::is_reference_to_member_function_pointer<pmf const volatile&>));BOOST_MPL_ASSERT_NOT((tt::is_reference_to_member_function_pointer<pmf[2]>));BOOST_MPL_ASSERT_NOT((tt::is_reference_to_member_function_pointer<pmf(&)[2]>));BOOST_MPL_ASSERT_NOT((tt::is_reference_to_member_function_pointer<pmf>));    

⌨️ 快捷键说明

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