TestForANSIStreamHeaders

This module checks whether the CXX compiler supports standard library headers without the .h extension (e.g. <iostream>).

Load this module in a CMake project with:

include(TestForANSIStreamHeaders)

Early versions of C++ (pre-C++98) didn't support including standard headers without extensions.

This module defines the following cache variable:

CMAKE_NO_ANSI_STREAM_HEADERS

A cache variable containing the result of the check. It will be set to value 0 if the standard headers can be included without the .h extension (C++ 98 and newer), and to value 1 if .h is required (ANSI C++).

Note

The C++ standard headers without extensions got formally introduced in the C++ 98 standard, making this issue obsolete.

Examples

Including this module will check how the C++ standard headers can be included and define the CMAKE_NO_ANSI_STREAM_HEADERS cache variable:

CMakeLists.txt
include(TestForANSIStreamHeaders)
file(
  CONFIGURE
  OUTPUT config.h
  CONTENT "#cmakedefine CMAKE_NO_ANSI_STREAM_HEADERS"
)

C++ program can then include the available header conditionally:

example.cxx
#include "config.h"

#ifdef CMAKE_NO_ANSI_STREAM_HEADERS
#  include <iostream.h>
#else
#  include <iostream>
#endif

int main() { ... }

See Also