# TestForANSIForScope

This module checks whether the `CXX` compiler restricts the scope of variables declared in a for-init-statement to the loop body.

Load this module in a CMake project with:

    include(TestForANSIForScope)

In early C++ (pre-C++98), variables declared in `for(<init-statement> ...)` could remain accessible outside the loop after its body (`for() { <body> }`).

This module defines the following cache variable:

`CMAKE_NO_ANSI_FOR_SCOPE`

  A cache variable containing the result of the check. It will be set to value `0` if the for-init-statement has restricted scope (`C++ 98` and newer), and to value `1` if not (`ANSI C++`).

Note

As of the `C++ 98` standard, variables declared in a for-init-statement are restricted to the loop body, making this behavior obsolete.

## Examples

Including this module will check the `for()` loop scope behavior and define the `CMAKE_NO_ANSI_FOR_SCOPE` cache variable:

`CMakeLists.txt`

    include(TestForANSIForScope)
    file(
      CONFIGURE
      OUTPUT config.h
      CONTENT "#cmakedefine CMAKE_NO_ANSI_FOR_SCOPE"
    )

which can be then used in a C++ program:

`example.cxx`

    #include "config.h"

    #ifdef CMAKE_NO_ANSI_FOR_SCOPE
    #  define for if(false) {} else for
    #endif

## See Also

- The `CMakeBackwardCompatibilityCXX` module.