2011/1/25 Hossein Haeri <powerprogman@yahoo.com>
Dear TONGARI,
 

> Where I said <> I meant <something in compiler's include path>, that
> works fine, just as Edward and Steven said.

Well, my working directory is already in my compiler's include path. And, inside Header.hpp, the following line

 #define BOOST_PP_FILENAME1 <Header.hpp>

Shouldn't it be
#define BOOST_PP_FILENAME_1 <Header.hpp>
?

Maybe it's better that you tell me what you'd be writing instead of the line above if it would have been you...


For example, suppose I have a lib called "Lib" that contains a header called "A.hpp" which includes "A_n_iteration.hpp" placed in the "detail" folder, I usually do:

/* in A.hpp */
#include <Lib/detail/A_n_iteration.hpp>

/* in A_n_iteration.hpp */
#if !BOOST_PP_IS_ITERATING

#define BOOST_PP_ITERATION_LIMITS (0, SOME_LIMIT)
/***/
#define BOOST_PP_FILENAME_1  <Lib/detail/A_n_iteration.hpp>
/***/
#include BOOST_PP_ITERATE()

#else // iterating
// THE CODE TO ITERATE....

#endif

That's all. Just make sure "Lib" is in the include path, then everything works fine for me.

> If this is not a bug with a specific compiler, I hope at least it should
> be noted in Boost.PP's doc.

It's not. Both quote and angle brackets are mentioned to work in the specs:

http://www.boost.org/doc/libs/1_45_0/libs/preprocessor/doc/ref/filename_x.html

It would be fine in the Remarks section to add words like:
"quoted filename may not work with some compilers here, such as gcc..."