| # Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| # file LICENSE.rst or https://cmake.org/licensing for details. | |
| #[=======================================================================[.rst: | |
| TestForSTDNamespace | |
| ------------------- | |
| This module checks whether the ``CXX`` compiler supports the ``std`` namespace | |
| for the C++ Standard Library. | |
| Load this module in a CMake project with: | |
| .. code-block:: cmake | |
| include(TestForSTDNamespace) | |
| Early versions of C++ (pre-C++98) did not have a requirement for a dedicated | |
| namespace of C++ Standard Template Library (STL) components (e.g. ``list``, | |
| etc.) and other parts of the C++ Standard Library (such as I/O streams | |
| ``cout``, ``endl``, etc), so they were available globally. | |
| This module defines the following cache variable: | |
| ``CMAKE_NO_STD_NAMESPACE`` | |
| A cache variable containing the result of the check. It will be set to value | |
| ``0`` if the ``std`` namespace is supported (``C++ 98`` and newer), and to | |
| value ``1`` if not (``ANSI C++``). | |
| .. note:: | |
| The ``std`` namespace got formally introduced in ``C++ 98`` standard, making | |
| this issue obsolete. | |
| Examples | |
| ^^^^^^^^ | |
| Including this module will check for the ``std`` namespace support and define | |
| the ``CMAKE_NO_STD_NAMESPACE`` cache variable: | |
| .. code-block:: cmake | |
| :caption: ``CMakeLists.txt`` | |
| include(TestForSTDNamespace) | |
| file( | |
| CONFIGURE | |
| OUTPUT config.h | |
| CONTENT "#cmakedefine CMAKE_NO_STD_NAMESPACE" | |
| ) | |
| which can be then used in a C++ program to define the missing namespace: | |
| .. code-block:: c++ | |
| :caption: ``example.cxx`` | |
| #include "config.h" | |
| #ifdef CMAKE_NO_STD_NAMESPACE | |
| # define std | |
| #endif | |
| See Also | |
| ^^^^^^^^ | |
| * The :module:`CMakeBackwardCompatibilityCXX` module. | |
| #]=======================================================================] | |
| if(NOT DEFINED CMAKE_STD_NAMESPACE) | |
| message(CHECK_START "Check for STD namespace") | |
| try_compile(CMAKE_STD_NAMESPACE | |
| SOURCES ${CMAKE_ROOT}/Modules/TestForSTDNamespace.cxx | |
| ) | |
| if (CMAKE_STD_NAMESPACE) | |
| message(CHECK_PASS "found") | |
| set (CMAKE_NO_STD_NAMESPACE 0 CACHE INTERNAL | |
| "Does the compiler support std::.") | |
| else () | |
| message(CHECK_FAIL "not found") | |
| set (CMAKE_NO_STD_NAMESPACE 1 CACHE INTERNAL | |
| "Does the compiler support std::.") | |
| endif () | |
| endif() |