我正在开发一个需要能够在标准 C++ 编译器和预标准编译器上编译的实用程序。代码可以并且将被抛出几乎所有现有的 C++ 编译器。
我正在寻找一种方法来稳健且可移植地确定目标编译器是否支持带有或不带有 .h 扩展名的头文件。我还需要检测是否支持命名空间。这两种需求都可能是可能的,也可能是不可能的。
一点背景知识:该实用程序是 Perl 的 Inline::CPP 语言扩展。该扩展自动包含<iostream>
,并尝试很好地猜测是否需要 '.h'(当然还有编译器是否支持命名空间)。但在这方面它远非完美,而且这个问题正在减少实用程序的用途的广度。
所以重申这个问题:我如何可移植地检测编译器是否支持标准头文件,例如<iostream>
,或预标准头文件,例如<iostream.h>
?