CLion 2022.3 Help

Support for C++20 Modules

Modules were introduced in the C++20 standard. They work as alternative to some use cases of header files and help share declarations and definitions across translation units.

CLion collects information from .ixx, .cppm, and .mxx files, parses export module {name} statements and creates mappings between {name} and module filenames. Then, the mappings are passed to the Clangd engine and used to provide code assistance and highlighting.

If you update the module’s code or rename the module, CLion will automatically parse the changes. The information collected from modules is preserved between the IDE restarts.

CLion's support for modules has been tested in the following environments:

  • CMake, Ninja generator, Visual Studio C++ toolchain.

  • CMake, Visual Studio generator, Visual Studio C++ toolchain.

  • CMake, Clang toolchain with compiler flags.

Code insight for Modules

  • CLion highlights module keywords (import, export, and module):

    Modules keywords highlighting
  • Completion works for symbols from modules:

    Completion for symbols from modules
  • You can navigate between declarations and definitions of symbols from modules using Ctrl+B:

    Navigation for modules
  • Find Usages and refactorings are available inside modules.

    There are also early versions of the Rename, Change Signature, and Extract refactorings that work across module boundaries (for now, they only work for files opened in CLion).

Known issues and limitations

  • Currently, new modules can't be added from the project view (CPP-30785).

  • Navigation to a module from its name in the import statement is not working yet (CPP-30798).

  • For now, CLion does not consider .cpp files to be modules, so it's recommended that you use other extensions (for example, .cppm).

Last modified: 05 December 2022