/*============================================================================= Phoenix V1.2.1 Copyright (c) 2001-2003 Joel de Guzman Use, modification and distribution is 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) ==============================================================================*/ #include #include #include #include #define PHOENIX_LIMIT 15 #include #include #include #include #include using namespace phoenix; using namespace std; /////////////////////////////////////////////////////////////////////////////// struct poly_print_ { template struct result { typedef void type; }; template void operator()(ArgT v) const { cout << v; } }; function poly_print; /////////////////////////////////////////////////////////////////////////////// int main() { char c1 = '1'; int i1 = 1; double d2_5 = 2.5; string hello = "hello"; const char* world = " world"; /////////////////////////////////////////////////////////////////////////////// // // Block statements // /////////////////////////////////////////////////////////////////////////////// ( poly_print(arg1), poly_print(arg2), poly_print(arg3), poly_print(arg4), poly_print(arg5), poly_print("\n\n") ) (hello, c1, world, i1, d2_5); /////////////////////////////////////////////////////////////////////////////// // // If-else, while, do-while, for tatements // /////////////////////////////////////////////////////////////////////////////// vector v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.push_back(5); v.push_back(6); v.push_back(7); v.push_back(8); v.push_back(9); v.push_back(10); cout << dec; ////////////////////////////////// for_each(v.begin(), v.end(), if_(arg1 > 3 && arg1 <= 8) [ cout << arg1 << ", " ] ); cout << endl; ////////////////////////////////// for_each(v.begin(), v.end(), if_(arg1 > 5) [ cout << arg1 << " > 5\n" ] .else_ [ if_(arg1 == 5) [ cout << arg1 << " == 5\n" ] .else_ [ cout << arg1 << " < 5\n" ] ] ); cout << endl; vector t = v; ////////////////////////////////// for_each(v.begin(), v.end(), ( while_(arg1--) [ cout << arg1 << ", " ], cout << val("\n") ) ); v = t; cout << endl; ////////////////////////////////// for_each(v.begin(), v.end(), ( do_ [ cout << arg1 << ", " ] .while_(arg1--), cout << val("\n") ) ); v = t; cout << endl; ////////////////////////////////// int iii; for_each(v.begin(), v.end(), ( for_(var(iii) = 0, var(iii) < arg1, ++var(iii)) [ cout << arg1 << ", " ], cout << val("\n") ) ); v = t; cout << endl; /////////////////////////////////////////////////////////////////////////////// // // End asserts // /////////////////////////////////////////////////////////////////////////////// return boost::report_errors(); }