Chris@16
|
1 ///////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
2 // expr1.hpp
|
Chris@16
|
3 // Contains definition of expr\<\>::operator() overloads.
|
Chris@16
|
4 //
|
Chris@16
|
5 // Copyright 2008 Eric Niebler. Distributed under the Boost
|
Chris@16
|
6 // Software License, Version 1.0. (See accompanying file
|
Chris@16
|
7 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
8
|
Chris@16
|
9 #define N BOOST_PP_ITERATION()
|
Chris@16
|
10
|
Chris@16
|
11 /// \overload
|
Chris@16
|
12 ///
|
Chris@16
|
13 template<BOOST_PP_ENUM_PARAMS(N, typename A)>
|
Chris@16
|
14 BOOST_FORCEINLINE
|
Chris@16
|
15 typename result_of::BOOST_PP_CAT(funop, N)<
|
Chris@16
|
16 expr const
|
Chris@16
|
17 , default_domain BOOST_PP_ENUM_TRAILING_PARAMS(N, const A)
|
Chris@16
|
18 >::type const
|
Chris@16
|
19 operator ()(BOOST_PP_ENUM_BINARY_PARAMS(N, A, const &a)) const
|
Chris@16
|
20 {
|
Chris@16
|
21 return result_of::BOOST_PP_CAT(funop, N)<
|
Chris@16
|
22 expr const
|
Chris@16
|
23 , default_domain BOOST_PP_ENUM_TRAILING_PARAMS(N, const A)
|
Chris@16
|
24 >::call(*this BOOST_PP_ENUM_TRAILING_PARAMS(N, a));
|
Chris@16
|
25 }
|
Chris@16
|
26
|
Chris@16
|
27 #ifdef BOOST_PROTO_DEFINE_TERMINAL
|
Chris@16
|
28 /// \overload
|
Chris@16
|
29 ///
|
Chris@16
|
30 template<BOOST_PP_ENUM_PARAMS(N, typename A)>
|
Chris@16
|
31 BOOST_FORCEINLINE
|
Chris@16
|
32 typename result_of::BOOST_PP_CAT(funop, N)<
|
Chris@16
|
33 expr
|
Chris@16
|
34 , default_domain BOOST_PP_ENUM_TRAILING_PARAMS(N, const A)
|
Chris@16
|
35 >::type const
|
Chris@16
|
36 operator ()(BOOST_PP_ENUM_BINARY_PARAMS(N, A, const &a))
|
Chris@16
|
37 {
|
Chris@16
|
38 return result_of::BOOST_PP_CAT(funop, N)<
|
Chris@16
|
39 expr
|
Chris@16
|
40 , default_domain BOOST_PP_ENUM_TRAILING_PARAMS(N, const A)
|
Chris@16
|
41 >::call(*this BOOST_PP_ENUM_TRAILING_PARAMS(N, a));
|
Chris@16
|
42 }
|
Chris@16
|
43 #endif
|
Chris@16
|
44
|
Chris@16
|
45 #undef N
|