# Why remove CMAKE\_CXX\_COMPILER\_IMPORT\_STD with CMake v4.5.0?

**URL:** <https://discourse.cmake.org/t/why-remove-cmake-cxx-compiler-import-std-with-cmake-v4-5-0/15910>\
**Category:** Code\
**Created:** [November 10, 2026, 10:03am UTC](https://discourse.cmake.org/t/why-remove-cmake-cxx-compiler-import-std-with-cmake-v4-5-0/15910 "2026-11-10T10:03:59Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![ClausKlein](https://discourse.cmake.org/user_avatar/discourse.cmake.org/clausklein/32/352_2.png) [@ClausKlein](https://discourse.cmake.org/u/ClausKlein)\
**Post date:** [November 10, 2026, 10:03am UTC](https://discourse.cmake.org/t/why-remove-cmake-cxx-compiler-import-std-with-cmake-v4-5-0/15910/1 "2026-11-10T10:03:59Z")

</div>

I know, [CMAKE\_CXX\_COMPILER\_IMPORT\_STD](https://cmake.org/cmake/help/v4.4/variable/CMAKE_CXX_COMPILER_IMPORT_STD.html#cmake-cxx-compiler-import-std) was experimental, but usefully and well documented.  
Now many projects (i.e. boost, beman, magic\_enum, …) has to change there code like this:

```diff
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 511c0f1..d449ad8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,5 @@
-# CMake 3.30 is required for C++23 `import std` support;
-cmake_minimum_required(VERSION 3.31...4.4)
+# Starting with CMake 3.30 is was required for C++23 `import std` support;
+cmake_minimum_required(VERSION 3.31...4.5)
 
 option(
     CMAKE_CXX_SCAN_FOR_MODULES
@@ -73,10 +73,14 @@ if(CMAKE_GENERATOR STREQUAL "Ninja" AND FMT_MODULE)
     if(FMT_MODULE)
         # Tell CMake that we explicitly want `import std`.
         # This will initialize the property on all targets declared after this to 1
- if(${CMAKE_CXX_STANDARD} IN_LIST CMAKE_CXX_COMPILER_IMPORT_STD)
+ if(CMAKE_CXX_STDLIB_MODULES_JSON AND CMAKE_VERSION VERSION_GREATER_EQUAL "4.5.0")
             set(CMAKE_CXX_MODULE_STD ON)
         else()
- set(CMAKE_CXX_MODULE_STD OFF)
+ if(${CMAKE_CXX_STANDARD} IN_LIST CMAKE_CXX_COMPILER_IMPORT_STD)
+ set(CMAKE_CXX_MODULE_STD ON)
+ else()
+ set(CMAKE_CXX_MODULE_STD OFF)
+ endif()
         endif()
 
         if(CMAKE_CXX_MODULE_STD)

```

or

```diff
bash-5.3$ git diff CMakeLists.txt 
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a4baedc..e5f2d0f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.30...4.5)
+cmake_minimum_required(VERSION 3.31...4.5)
 
 include(cmake/prelude.cmake)
 
@@ -46,8 +46,13 @@ if(PROJECT_IS_TOP_LEVEL)
     option(BOOST_USE_MODULES "Do build with CXX_MODULES if possible" OFF)
     if(BOOST_USE_MODULES)
         set(CMAKE_CXX_SCAN_FOR_MODULES ON)
- if(NOT CMAKE_CXX_STANDARD GREATER_EQUAL 23)
- set(CMAKE_CXX_MODULE_STD OFF)
+ if(CMAKE_CXX_STDLIB_MODULES_JSON AND CMAKE_VERSION VERSION_GREATER_EQUAL "4.5.0")
+ set(CMAKE_CXX_MODULE_STD ON)
+ list(APPEND CMAKE_CXX_COMPILER_IMPORT_STD ${CMAKE_CXX_STANDARD})
+ else()
+ if(NOT CMAKE_CXX_STANDARD GREATER_EQUAL 23)
+ set(CMAKE_CXX_MODULE_STD OFF)
+ endif()
         endif()
     else()
         set(CMAKE_CXX_SCAN_FOR_MODULES OFF)
bash-5.3$ 

```

@anarthal **FYI**

see [import-std-support](https://cmake.org/cmake/help/latest/manual/cmake-cxxmodules.7.html#import-std-support)

---

<div class="post-metadata">

**Author:** ![vito.gamberini](https://discourse.cmake.org/user_avatar/discourse.cmake.org/vito.gamberini/32/4376_2.png) [@vito.gamberini](https://discourse.cmake.org/u/vito.gamberini)\
**Post date:** [November 13, 2026, 1:41am UTC](https://discourse.cmake.org/t/why-remove-cmake-cxx-compiler-import-std-with-cmake-v4-5-0/15910/2 "2026-11-13T01:41:08Z")

</div>

Because its described purpose no longer exists. The information it contained no longer corresponds to anything CMake does.

The code above checks if the global C++ standard is in the list `CMAKE_CXX_COMPILER_IMPORT_STD` provides. But there is no such list anymore, the source the list pulled from is gone entirely. The mechanism which made the variable relevant, and restricted `import std` to certain standards, is gone.

---

<div class="post-metadata">

**Author:** ![ClausKlein](https://discourse.cmake.org/user_avatar/discourse.cmake.org/clausklein/32/352_2.png) [@ClausKlein](https://discourse.cmake.org/u/ClausKlein)\
**Post date:** [November 13, 2026, 5:22am UTC](https://discourse.cmake.org/t/why-remove-cmake-cxx-compiler-import-std-with-cmake-v4-5-0/15910/3 "2026-11-13T05:22:43Z")

</div>

**NOTE** : The widely used [CMAKE\_CXX\_MODULE\_STD](https://cmake.org/cmake/help/v4.4/variable/CMAKE_CXX_MODULE_STD.html#cmake-cxx-module-std) Variable and the corresponding target property `CXX_MODULE_STD` are removed too!

The only way I know to disable the use of `import std;` is now:

```cmake
set(CMAKE_CXX_STDLIB_MODULES_JSON) # empty value!

```

```diff
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 22345038a..904f0fbb7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.30...4.4)
+cmake_minimum_required(VERSION 3.30...4.5)
 
 include(cmake/enable_import_std.cmake)
 
@@ -88,16 +89,20 @@ target_sources(
         FILE_SET HEADERS BASE_DIRS include module FILES ${_public_headers} module/asio-gmf.h
 )
 target_compile_features(asio PRIVATE cxx_std_${CMAKE_CXX_STANDARD})
-set_target_properties(asio PROPERTIES VERIFY_INTERFACE_HEADER_SETS ${PROJECT_IS_TOP_LEVEL})
+set_target_properties(asio PROPERTIES VERIFY_INTERFACE_HEADER_SETS OFF)
 target_link_libraries(asio PUBLIC asio_header)
 
 option(ASIO_IMPORT_STD "Enable 'import std;' support for ASIO module" OFF)
 if(ASIO_IMPORT_STD)
- message(STATUS "Build asio with target PROPERTY CXX_MODULE_STD ON")
- # Tell CMake that we explicitly want `import std`.
- # This initializes the property CXX_MODULE_STD of asio targets to 1 (requires CMake 3.30+)
- set_target_properties(asio PROPERTIES CXX_MODULE_STD ON)
- target_compile_definitions(asio PUBLIC ASIO_HAS_IMPORT_STD)
+ if(CMAKE_CXX_STDLIB_MODULES_JSON AND CMAKE_VERSION VERSION_GREATER_EQUAL "4.5.0")
+ target_compile_definitions(asio PUBLIC ASIO_HAS_IMPORT_STD)
+ else()
+ message(STATUS "Build asio with target PROPERTY CXX_MODULE_STD ON")
+ # Tell CMake that we explicitly want `import std`.
+ # This initializes the property CXX_MODULE_STD of asio targets to 1 (requires CMake 3.30+)
+ set_target_properties(asio PROPERTIES CXX_MODULE_STD ON)
+ target_compile_definitions(asio PUBLIC ASIO_HAS_IMPORT_STD)
+ endif()
 endif()
 
 if(ASIO_ENABLE_SSL)

```

---

<div class="post-metadata">

**Author:** ![vito.gamberini](https://discourse.cmake.org/user_avatar/discourse.cmake.org/vito.gamberini/32/4376_2.png) [@vito.gamberini](https://discourse.cmake.org/u/vito.gamberini)\
**Post date:** [November 13, 2026, 6:11pm UTC](https://discourse.cmake.org/t/why-remove-cmake-cxx-compiler-import-std-with-cmake-v4-5-0/15910/4 "2026-11-13T18:11:10Z")

</div>

Turning off scanning also disables `import std`.

You can’t directly disable `#include <cstdlib>` via a dedicated CMake variable either.
