/////////////////////////////////////////////////////////////////////////////// // funop.hpp // Contains definition of funop[n]\<\> class template. // // Copyright 2008 Eric Niebler. 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) template struct funop0 { typedef typename proto::base_expr< Domain , tag::function , list1< Expr & > >::type type; BOOST_FORCEINLINE static type const call( Expr &e ) { type that = { e }; return that; } }; template struct funop : funop0< typename detail::same_cv::type , Domain > {}; template struct funop1 { typedef typename proto::base_expr< Domain , tag::function , list2< Expr & , typename proto::result_of::as_child::type > >::type type; BOOST_FORCEINLINE static type const call( Expr &e , A0 &a0 ) { type that = { e , proto::as_child(a0) }; return that; } }; template struct funop : funop1< typename detail::same_cv::type , Domain , typename remove_reference::type > {}; template struct funop2 { typedef typename proto::base_expr< Domain , tag::function , list3< Expr & , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type > >::type type; BOOST_FORCEINLINE static type const call( Expr &e , A0 &a0 , A1 &a1 ) { type that = { e , proto::as_child(a0) , proto::as_child(a1) }; return that; } }; template struct funop : funop2< typename detail::same_cv::type , Domain , typename remove_reference::type , typename remove_reference::type > {}; template struct funop3 { typedef typename proto::base_expr< Domain , tag::function , list4< Expr & , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type > >::type type; BOOST_FORCEINLINE static type const call( Expr &e , A0 &a0 , A1 &a1 , A2 &a2 ) { type that = { e , proto::as_child(a0) , proto::as_child(a1) , proto::as_child(a2) }; return that; } }; template struct funop : funop3< typename detail::same_cv::type , Domain , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type > {}; template struct funop4 { typedef typename proto::base_expr< Domain , tag::function , list5< Expr & , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type > >::type type; BOOST_FORCEINLINE static type const call( Expr &e , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 ) { type that = { e , proto::as_child(a0) , proto::as_child(a1) , proto::as_child(a2) , proto::as_child(a3) }; return that; } }; template struct funop : funop4< typename detail::same_cv::type , Domain , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type > {}; template struct funop5 { typedef typename proto::base_expr< Domain , tag::function , list6< Expr & , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type > >::type type; BOOST_FORCEINLINE static type const call( Expr &e , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 ) { type that = { e , proto::as_child(a0) , proto::as_child(a1) , proto::as_child(a2) , proto::as_child(a3) , proto::as_child(a4) }; return that; } }; template struct funop : funop5< typename detail::same_cv::type , Domain , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type > {}; template struct funop6 { typedef typename proto::base_expr< Domain , tag::function , list7< Expr & , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type > >::type type; BOOST_FORCEINLINE static type const call( Expr &e , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 ) { type that = { e , proto::as_child(a0) , proto::as_child(a1) , proto::as_child(a2) , proto::as_child(a3) , proto::as_child(a4) , proto::as_child(a5) }; return that; } }; template struct funop : funop6< typename detail::same_cv::type , Domain , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type > {}; template struct funop7 { typedef typename proto::base_expr< Domain , tag::function , list8< Expr & , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type > >::type type; BOOST_FORCEINLINE static type const call( Expr &e , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 ) { type that = { e , proto::as_child(a0) , proto::as_child(a1) , proto::as_child(a2) , proto::as_child(a3) , proto::as_child(a4) , proto::as_child(a5) , proto::as_child(a6) }; return that; } }; template struct funop : funop7< typename detail::same_cv::type , Domain , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type > {}; template struct funop8 { typedef typename proto::base_expr< Domain , tag::function , list9< Expr & , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type > >::type type; BOOST_FORCEINLINE static type const call( Expr &e , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7 ) { type that = { e , proto::as_child(a0) , proto::as_child(a1) , proto::as_child(a2) , proto::as_child(a3) , proto::as_child(a4) , proto::as_child(a5) , proto::as_child(a6) , proto::as_child(a7) }; return that; } }; template struct funop : funop8< typename detail::same_cv::type , Domain , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type > {}; template struct funop9 { typedef typename proto::base_expr< Domain , tag::function , list10< Expr & , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type , typename proto::result_of::as_child::type > >::type type; BOOST_FORCEINLINE static type const call( Expr &e , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7 , A8 &a8 ) { type that = { e , proto::as_child(a0) , proto::as_child(a1) , proto::as_child(a2) , proto::as_child(a3) , proto::as_child(a4) , proto::as_child(a5) , proto::as_child(a6) , proto::as_child(a7) , proto::as_child(a8) }; return that; } }; template struct funop : funop9< typename detail::same_cv::type , Domain , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type , typename remove_reference::type > {};