Le 02/11/11 23:56, Mateusz Łoskot a écrit :
Hi,

I'm still taking early steps with Boost.Fusion.
I'm trying to adapt a bunch of struct and template struct for easy I/O
operations.
I don't understand one thing from the docs. Here we go;

1) Given the example [1] of template struct adoption:

namespace demo
{
    template<typename Name, typename Age>
    struct employee
    {
        Name name;
        Age age;
    };
}

// Any instantiated demo::employee is now a Fusion sequence
BOOST_FUSION_ADAPT_TPL_STRUCT(
    (Name)(Age),
    (demo::employee) (Name)(Age),
    (Name, name)
    (Age, age))

[1] http://www.boost.org/doc/libs/1_47_0/libs/fusion/doc/html/fusion/adapted/adapt_tpl_struct.html

2) The included comment says "demo::employee is now a Fusion sequence".

3) Jumping to I/O and out docs, reading that [2]

"The I/O operators: << and >> work generically on all Fusion sequences. "

[2] http://www.boost.org/doc/libs/1_47_0/libs/fusion/doc/html/fusion/sequence/operator/i_o.html

4) Means, I should be able to stream Fusion-adopted demo::employee

#include <iostream>
#include <string>
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <boost/fusion/include/adapt_struct.hpp>
#include <boost/fusion/sequence/io.hpp>
#include <boost/fusion/include/io.hpp>

// code from above example goes here

int main()
{
    demo::employee<std::string, int> e;
    std::cout << e << std::endl;
}

5)  Given what I have learned above, I expect the cout << e to work:

$ g++ -I/home/mloskot/dev/boost/_svn/trunk boost_fusion.cpp
boost_fusion.cpp: In function ‘int main()’:
boost_fusion.cpp:28:18: error: no match for ‘operator<<’ in ‘std::cout << e’
...
I assume complete error is not necessary as my question is of general nature.

Is my expectation valid?

Hi,

try adding

#include <boost/fusion/include/io.hpp>

It is at the end of

[2] http://www.boost.org/doc/libs/1_47_0/libs/fusion/doc/html/fusion/sequence/operator/i_o.html


Best,
Vicente