FusionシーケンスからFusionシーケンスにアダプトされた型への変換

BOOST_FUSION_DEFINE_STRUCTで定義された型は、Fusionシーケンスにアダプトされると同時に、
Fusionシーケンスを受け取るコンストラクタと代入演算子が生成されるようです。
そのため、fusion::copy()を使用することなくシーケンスの型変換ができます。

#include <iostream>
#include <string>
#include <boost/fusion/include/define_struct.hpp>
#include <boost/fusion/include/vector.hpp>
#include <boost/fusion/include/io.hpp>

BOOST_FUSION_DEFINE_STRUCT(
    (),
    Person,
    (int, id)
    (int, age)
    (std::string, name)
)

int main()
{
    using namespace boost::fusion::operators;

    const boost::fusion::vector<int, int, std::string> v(1, 26, "Akira");
    {
        const Person p = v;

        std::cout << p << std::endl;
    }
    {
        Person p;
        p = v;

        std::cout << p << std::endl;
    }
}
(1 26 Akira)
(1 26 Akira)

参照:
BOOST_FUSION_DEFINE_STRUCT