core/test/visit_each_test.cpp

66 lines
1021 B
C++

//
// 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 <boost/visit_each.hpp>
#include <boost/core/lightweight_test.hpp>
#include <string>
struct X
{
int v;
std::string w;
};
template<class Visitor> 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();
}