----- Original Message -----
From: "Hugo Duncan" <[EMAIL PROTECTED]>


> I think I have found a problem with boost/mpl/list.hpp
>
> I am including files using BOOST_PP_ITERATE.  One of the files
> that I include happens itself to include boost/mpl/list.hpp.

I'm not sure what you mean here.  If you are iterating over a file (or
section of a file) with the file-iteration mechanism.  That iterated text
should *never* include regular headers.  E.g. if '1.hpp' uses the iteration
mechanism to iterate over '2.hpp', and '2.hpp' needs the facilities from
some other file (like <iostream> or anything else at all), '1.hpp' can
include them, *not* '2.hpp'.  If you want to separate concerns as much as
possible, you can reference the iterated file as a normal header so it can
include other facilities that are needed:

// 1.hpp

#ifndef ONE_HPP
#define ONE_HPP

#include <boost/preprocessor/iteration/iterate.hpp>

#include "2.hpp" // normal inclusion

#define BOOST_PP_ITERATION_PARAMS_1 \
    (3, (1, 10, "2.hpp")) \
    /**/
??=include BOOST_PP_ITERATE() // not normal at all!

#endif // EOF

--------------------------------------

// 2.hpp

#if !BOOST_PP_IS_ITERATING

// as normal header

    #ifndef TWO_HPP
    #define TWO_HPP

    #include <iostream>
    #include <boost/preprocessor/repetition/repeat.hpp>
    // etc.

    #endif // TWO_HPP

#else

// not normal at all!
// use <iostream> and <../repeat.hpp> facilities...

#endif

> boost/mpl/list.hpp begins
>
>   #if !defined(BOOST_PP_IS_ITERATING)
>   ///// header body
>   #ifndef BOOST_MPL_LIST_HPP_INCLUDED
>   #define BOOST_MPL_LIST_HPP_INCLUDED
>
>
> Because I am using BOOST_PP_ITERATE, BOOST_PP_IS_ITERATING is defined,
> and problems occur.
>
> I assume BOOST_PP_IS_ITERATING is checked for logic associated with
> preprocessed file generation.

It is defined when the file-iteration mechanism is iterating over a file.
Its purpose is to distinguish between a normal inclusion and an "iteration"
inclusion so that the same file can iterate over itself.  When a file that
is iterated includes other files *during an iteration*,
BOOST_PP_IS_ITERATING is still defined and the other files probably won't
know how to handle it. (<boost/mpl/list.hpp> is one example of this.)  The
solution is simply to not include any files during a particular iteration.

Paul Mensonides

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to