// // visit_each_test.cpp // // Copyright 2014 Peter Dimov // // 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 struct X { int v; std::string w; }; template inline void visit_each( Visitor & visitor, X const & x ) { using boost::visit_each; visit_each( visitor, x.v ); visit_each( visitor, x.w ); } struct V { int s_; V(): s_( 0 ) { } template< class T > void operator()( T const & t ) { } void operator()( int const & v ) { s_ = s_ * 10 + v; } void operator()( std::string const & w ) { s_ = s_ * 10 + w.size(); } }; int main() { X x = { 5, "test" }; V v; { using boost::visit_each; visit_each( v, x ); } BOOST_TEST( v.s_ == 54 ); return boost::report_errors(); }