
I have another question about Phoenix 3. Is the copy assignment of Actors no-op, or does it really copy the contents? Actor a; Actor b = ...; a = b; // no-op? If it is no-op, then the second assertion in the following code is not generally satisfied (the same code is attached in this mail): #include <boost/assert.hpp> #include <boost/iterator/transform_iterator.hpp> #include <boost/phoenix/core.hpp> #include <boost/phoenix/operator.hpp> template <typename Iterator> void test_forward_iterator(Iterator const& i) { Iterator j = i; BOOST_ASSERT(*j == *i); // OK Iterator k; k = i; BOOST_ASSERT(*k == *i); // Oops! } int main(int argc, char* argv[]) { using boost::phoenix::arg_names::_1; int ar[3] = {}; test_forward_iterator(boost::make_transform_iterator(ar, _1 + 5)); return 0; } So transform_iterator with Phoenix-3 Actors cannot satisfy even the ForwardIterator requirements. (In Phoenix 2, boost::phoenix::value<T> is not default constructible, and so the above iterator does not satisfy the ForwardIterator requirements too.) I wish transform_iterator with Phoenix Actors can be ForwardIterator, BidirectionalIterator and RandomAccessIterator :) Regards, Michel