"Dave Korn" <[EMAIL PROTECTED]> writes:

>   Here's one: it doesn't involve -iquote, but I think it illustrates the same
> problem.

The problem which Mike described had to do with #include_next.  So I
don't think this is the same problem.

>   One of the STL headers finds our user-appplication debug/debug.h instead of
> ./debug/debug.h, which is what it expects to find (umm, I don't really mean
> "." in the $PWD sense, I mean it in the sense of the directory where the STL
> header lives).

I would describe this as a bug in the libstdc++ header files.  They do
this:

#include <debug/debug.h>

That is a bad idea because if the user uses a -I option which happens
to point to a debug/debug.h file, the wrong debug.h file will be
picked up.

The libstdc++ header files should probably do this:

#include "debug/debug.h"

Then the search will start from the location of the libstdc++ header
file, and the preprocessor will always find the right header file.
This is a consistent issue throughout the libstdc++ header files.

>   It used to be possible to work around this problem by using -I- to split the
> path and relying on <> includes to only pick up on system files.  That's not
> always an option ever since the change that made -I- /also/ prevent include
> files located side-by-side in the same directory from finding each other
> without a full path.

Yes, and the -I- option has been deprecated because it doesn't do the
right thing.

Instead, we have -iquote.  And we are currently missing
-idisable-the-directory-of-the-including-file, which is a bug.

Unfortunately, using -idisable-the-directory-of-the-including-file
will break my suggestion of using #include "" in the libstdc++ header
files.  But using #include <> in those header files is also wrong.
I'm not sure how to resolve that.

Ian

Reply via email to