Skip to content

[C++23] [Modules] module before include will have a "redefinition of concept" error #91111

@ncihnegn

Description

@ncihnegn

Similar to #87609.

LLVM: 18.1.5
OS: macOS Sonoma 14.4.1
CPU: Apple M1

Demo: https://github.com/ncihnegn/cpp-modules-demo

[1/8] Scanning /Users/foobar/Temp/cpp-modules-demo/foo.cxx for CXX dependencies [2/8] Scanning /Users/foobar/Temp/cpp-modules-demo/main.cxx for CXX dependencies [3/8] Generating CXX dyndep file CMakeFiles/foo.dir/CXX.dd [4/8] Generating CXX dyndep file CMakeFiles/hello.dir/CXX.dd [5/8] Building CXX object CMakeFiles/foo.dir/foo.cxx.o [6/8] Linking CXX static library libfoo.a [7/8] Building CXX object CMakeFiles/hello.dir/main.cxx.o FAILED: CMakeFiles/hello.dir/main.cxx.o /usr/local/Sither/Cellar/llvm/18.1.5/bin/clang++ -std=c++20 -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.4.sdk -MD -MT CMakeFiles/hello.dir/main.cxx.o -MF CMakeFiles/hello.dir/main.cxx.o.d @CMakeFiles/hello.dir/main.cxx.o.modmap -o CMakeFiles/hello.dir/main.cxx.o -c /Users/foobar/Temp/cpp-modules-demo/main.cxx In file included from /Users/foobar/Temp/cpp-modules-demo/main.cxx:3: In file included from /Users/foobar/Temp/cpp-modules-demo/bar.h:4: /usr/local/Sither/Cellar/llvm/18.1.5/bin/../include/c++/v1/optional:571:9: error: redefinition of concept '__is_derived_from_optional' with different template parameters or requirements 571 | concept __is_derived_from_optional = requires(const _Tp& __t) { []<class _Up>(const optional<_Up>&) {}(__t); }; | ^ /Users/foobar/Temp/cpp-modules-demo/foo.cxx:3:10: note: '/usr/local/Sither/Cellar/llvm/18.1.5/bin/../include/c++/v1/optional' included multiple times, additional include site in header from module 'foo.<global>' 3 | #include <optional> | ^ /Users/foobar/Temp/cpp-modules-demo/foo.cxx:2:1: note: foo.<global> defined here 2 | module; | ^ /Users/foobar/Temp/cpp-modules-demo/bar.h:4:10: note: '/usr/local/Sither/Cellar/llvm/18.1.5/bin/../include/c++/v1/optional' included multiple times, additional include site here 4 | #include <optional> | ^ In file included from /Users/foobar/Temp/cpp-modules-demo/main.cxx:3: In file included from /Users/foobar/Temp/cpp-modules-demo/bar.h:4: /usr/local/Sither/Cellar/llvm/18.1.5/bin/../include/c++/v1/optional:1240:13: error: use of undeclared identifier '__is_derived_from_optional' 1240 | requires(!__is_derived_from_optional<_Up>) && three_way_comparable_with<_Tp, _Up> | ^ 2 errors generated. ninja: build stopped: subcommand failed. 

Metadata

Metadata

Assignees

No one assigned

    Labels

    clang:frontendLanguage frontend issues, e.g. anything involving "Sema"clang:modulesC++20 modules and Clang Header Modules

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions