/*============================================================================= Copyright (c) 2001-2007 Joel de Guzman 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 #include #include #include namespace phoenix = boost::phoenix; int main() { using phoenix::ref; using phoenix::val; using phoenix::arg_names::arg1; using std::cout; { int x; int y; x = 123; y = 123; (ref(x) &= 456)(); y &= 456; BOOST_TEST(x == y); x = 123; y = 123; (ref(x) |= 456)(); y |= 456; BOOST_TEST(x == y); x = 123; y = 123; (ref(x) ^= 456)(); y ^= 456; BOOST_TEST(x == y); x = 123; y = 123; (ref(x) <<= 4)(); y <<= 4; BOOST_TEST(x == y); x = 1230000; y = 1230000; (ref(x) >>= 4)(); y >>= 4; BOOST_TEST(x == y); int& r1 = (ref(x) &= 456)(); // should be an lvalue int& r2 = (ref(x) |= 456)(); // should be an lvalue int& r3 = (ref(x) ^= 456)(); // should be an lvalue int& r4 = (ref(x) <<= 4)(); // should be an lvalue int& r5 = (ref(x) >>= 4)(); // should be an lvalue BOOST_TEST(&r1 == &r2 && &r2 == &r3 && &r3 == &r4 && &r4 == &r5); } { BOOST_TEST((val(123) & 456)() == (123 & 456)); BOOST_TEST((val(123) | 456)() == (123 | 456)); BOOST_TEST((val(123) ^ 456)() == (123 ^ 456)); BOOST_TEST((val(123) << 4)() == (123 << 4)); BOOST_TEST((val(1230000) >> 4)() == (1230000 >> 4)); char const* s = "Yabadabadoo!!!\n"; (cout << arg1)(s); } return boost::report_errors(); }