When I compiled the code snippet as follows, there were some errors
about searching tag_of in namespace boost::fusion::traits::detail. But
after reviewing the source code, I found the desired tag_of was
actually located in namespace boost::fusion::detail. Moreover it will
be compiled successfully if adding this full and correct namespace
before tag_of in the file <is_sequence.hpp>.
Here is code snippet:
typedef fusion::vector< int, string > TPerson;
TPerson person( 20, "Alan" );
cout << person << endl;
Here are compile errors:
1>d:\libraries\boost_1_39_0\
boost\fusion\support\is_sequence.hpp(59) : error C2039: 'tag_of' : is not a member of 'boost::fusion::traits::detail'
1> d:\libraries\boost_1_39_0\boost\utility\enable_if.hpp(36) : see reference to class template instantiation 'boost::fusion::traits::is_sequence<T>' being compiled
1> with
1> [
1> T=TPerson
1> ]
1> d:\samples\boost\fusion\fusion.cpp(28) : see reference to class template instantiation 'boost::enable_if<Cond,T>' being compiled
1> with
1> [
1> Cond=boost::fusion::traits::is_sequence<TPerson>,
1> T=std::ostream &
1> ]
Here is the origin code in <is_sequence.hpp>:
namespace traits
{
template <typename T>
struct is_sequence
: extension::is_sequence_impl<typename detail::tag_of<T>::type>::
template apply<T>
{};
}
Here is the modification:
namespace traits
{
template <typename T>
struct is_sequence
: extension::is_sequence_impl<typename boost::fusion::detail::tag_of<T>::type>::
template apply<T>
{};
}
I guess this should be a minor bug in boost.fusion.