Chris@16: // - casts.hpp -- BLambda Library ------------- Chris@16: // Chris@16: // Copyright (C) 2000 Gary Powell (powellg@amazon.com) Chris@16: // Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi) Chris@16: // Chris@16: // Distributed under the Boost Software License, Version 1.0. (See Chris@16: // accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: // Chris@16: // For more information, see http://www.boost.org Chris@16: Chris@16: // ----------------------------------------------- Chris@16: Chris@16: #if !defined(BOOST_LAMBDA_CASTS_HPP) Chris@16: #define BOOST_LAMBDA_CASTS_HPP Chris@16: Chris@16: #include "boost/lambda/detail/suppress_unused.hpp" Chris@16: #include "boost/lambda/core.hpp" Chris@16: Chris@16: #include Chris@16: Chris@16: namespace boost { Chris@16: namespace lambda { Chris@16: Chris@16: template Chris@16: struct return_type_N; Chris@16: Chris@16: template class cast_action; Chris@16: Chris@16: template class static_cast_action; Chris@16: template class dynamic_cast_action; Chris@16: template class const_cast_action; Chris@16: template class reinterpret_cast_action; Chris@16: Chris@16: class typeid_action; Chris@16: class sizeof_action; Chris@16: Chris@16: // Cast actions Chris@16: Chris@16: template class cast_action > Chris@16: { Chris@16: public: Chris@16: template Chris@16: static RET apply(Arg1 &a1) { Chris@16: return static_cast(a1); Chris@16: } Chris@16: }; Chris@16: Chris@16: template class cast_action > { Chris@16: public: Chris@16: template Chris@16: static RET apply(Arg1 &a1) { Chris@16: return dynamic_cast(a1); Chris@16: } Chris@16: }; Chris@16: Chris@16: template class cast_action > { Chris@16: public: Chris@16: template Chris@16: static RET apply(Arg1 &a1) { Chris@16: return const_cast(a1); Chris@16: } Chris@16: }; Chris@16: Chris@16: template class cast_action > { Chris@16: public: Chris@16: template Chris@16: static RET apply(Arg1 &a1) { Chris@16: return reinterpret_cast(a1); Chris@16: } Chris@16: }; Chris@16: Chris@16: // typeid action Chris@16: class typeid_action { Chris@16: public: Chris@16: template Chris@16: static RET apply(Arg1 &a1) { Chris@16: detail::suppress_unused_variable_warnings(a1); Chris@16: return typeid(a1); Chris@16: } Chris@16: }; Chris@16: Chris@16: // sizeof action Chris@16: class sizeof_action Chris@16: { Chris@16: public: Chris@16: template Chris@16: static RET apply(Arg1 &a1) { Chris@16: return sizeof(a1); Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: // return types of casting lambda_functors (all "T" type.) Chris@16: Chris@16: template