-
Notifications
You must be signed in to change notification settings - Fork 14.3k
Update __cpp_concepts macro #87998
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update __cpp_concepts macro #87998
Conversation
After discussion with a few others, and seeing the state of our concepts support, I believe it is worth trying to see if we can update this for Clang19. The forcing function is that libstdc++'s <expected> header is guarded by this macro, so we need to update it to support that.
@llvm/pr-subscribers-clang Author: Erich Keane (erichkeane) ChangesAfter discussion with a few others, and seeing the state of our concepts support, I believe it is worth trying to see if we can update this for Clang19. The forcing function is that libstdc++'s <expected> header is guarded by this macro, so we need to update it to support that. Full diff: https://github.com/llvm/llvm-project/pull/87998.diff 4 Files Affected:
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 28e8ddb3c41c3e..4f02459ca1f09f 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -110,6 +110,11 @@ C++20 Feature Support
templates (`P1814R0 <https://wg21.link/p1814r0>`_).
(#GH54051).
+- __cpp_concepts macro now updated to `202002L`, as we are confident that,
+ modulo a handful of bugs and core issues, that our concepts implementation is
+ sufficient. This should enable libstdc++'s `<expected>` to work correctly in
+ clang.
+
C++23 Feature Support
^^^^^^^^^^^^^^^^^^^^^
diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp
index 48ad92063bd461..84069e96f41464 100644
--- a/clang/lib/Frontend/InitPreprocessor.cpp
+++ b/clang/lib/Frontend/InitPreprocessor.cpp
@@ -720,10 +720,7 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts,
if (LangOpts.CPlusPlus20) {
Builder.defineMacro("__cpp_aggregate_paren_init", "201902L");
- // P0848 is implemented, but we're still waiting for other concepts
- // issues to be addressed before bumping __cpp_concepts up to 202002L.
- // Refer to the discussion of this at https://reviews.llvm.org/D128619.
- Builder.defineMacro("__cpp_concepts", "201907L");
+ Builder.defineMacro("__cpp_concepts", "202002");
Builder.defineMacro("__cpp_conditional_explicit", "201806L");
Builder.defineMacro("__cpp_consteval", "202211L");
Builder.defineMacro("__cpp_constexpr_dynamic_alloc", "201907L");
diff --git a/clang/test/Lexer/cxx-features.cpp b/clang/test/Lexer/cxx-features.cpp
index 9496746c6fd663..1de32498cd345b 100644
--- a/clang/test/Lexer/cxx-features.cpp
+++ b/clang/test/Lexer/cxx-features.cpp
@@ -85,7 +85,7 @@
#error "wrong value for __cpp_char8_t"
#endif
-#if check(concepts, 0, 0, 0, 0, 201907, 201907, 201907)
+#if check(concepts, 0, 0, 0, 0, 202002, 202002, 202002)
#error "wrong value for __cpp_concepts"
#endif
diff --git a/clang/www/cxx_status.html b/clang/www/cxx_status.html
index c1d95dadbb27e2..130148c7420fa1 100755
--- a/clang/www/cxx_status.html
+++ b/clang/www/cxx_status.html
@@ -544,16 +544,8 @@ <h2 id="cxx20">C++20 implementation status</h2>
</tr>
<tr> <!-- from Cologne -->
<td><a href="https://wg21.link/p0848r3">P0848R3</a></td>
- <td rowspan="1" class="partial" align="center">
- <details>
- <summary>Clang 16 (Partial)</summary>
- Because of other concepts implementation deficits, the __cpp_concepts macro is not yet set to 202002L.
- Also, the related defect reports <a href="https://wg21.link/cwg1496">DR1496</a> and
- <a href="https://wg21.link/cwg1734">DR1734</a> are not yet implemented. Accordingly, deleted
- special member functions are treated as eligible even though they shouldn't be.
- </details>
- </td>
- </tr>
+ <td rowspan="1" class="full" align="center">Clang 19</td>
+ </tr>
<tr>
<td><a href="https://wg21.link/p1616r1">P1616R1</a></td>
<td rowspan="2" class="full" align="center">Clang 10</td>
|
Also, the related defect reports <a href="https://wg21.link/cwg1496">DR1496</a> and | ||
<a href="https://wg21.link/cwg1734">DR1734</a> are not yet implemented. Accordingly, deleted | ||
special member functions are treated as eligible even though they shouldn't be. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is that not true any more?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Those aren't implemented, and that IS true, but it is kind of orthogonal to concepts. Those issues pre-date concepts, and are only somewhat more visible thanks to concepts, but are not 'worse' nor 'caused' by it.
clang/docs/ReleaseNotes.rst
Outdated
@@ -110,6 +110,11 @@ C++20 Feature Support | |||
templates (`P1814R0 <https://wg21.link/p1814r0>`_). | |||
(#GH54051). | |||
|
|||
- __cpp_concepts macro now updated to `202002L`, as we are confident that, | |||
modulo a handful of bugs and core issues, that our concepts implementation is |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We have fairly large hands
concepts
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, feel free to take or leave my suggestion on the release note.
clang/docs/ReleaseNotes.rst
Outdated
- __cpp_concepts macro now updated to `202002L`, as we are confident that, | ||
modulo a handful of bugs and core issues, that our concepts implementation is | ||
sufficient. This should enable libstdc++'s `<expected>` to work correctly in | ||
clang. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- __cpp_concepts macro now updated to `202002L`, as we are confident that, | |
modulo a handful of bugs and core issues, that our concepts implementation is | |
sufficient. This should enable libstdc++'s `<expected>` to work correctly in | |
clang. | |
- We have sufficient confidence in the concepts implementation to update the | |
``__cpp_concepts`` macro to `202002L`. This enables ``<expected>`` from | |
libstdc++ to work correctly with Clang. |
??
After discussion with a few others, and seeing the state of our concepts support, I believe it is worth trying to see if we can update this for Clang19. The forcing function is that libstdc++'s
<expected>
header is guarded by this macro, so we need to update it to support that.Closes #57524.