[clang] [clang][NFC] Mark CWG988 as implemented and add a test (PR #196889)
via cfe-commits
cfe-commits at lists.llvm.org
Mon May 11 00:06:32 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Victor Chernyakin (localspook)
<details>
<summary>Changes</summary>
[CWG988](https://wg21.link/cwg988) specifies that reference collapsing is performed when trying to form a reference to a `decltype`. Clang implements this since 2.7: https://godbolt.org/z/vYzKbv8x7 (and I checked a few versions after that to make sure there were no regressions).
---
Full diff: https://github.com/llvm/llvm-project/pull/196889.diff
2 Files Affected:
- (modified) clang/test/CXX/drs/cwg9xx.cpp (+15)
- (modified) clang/www/cxx_dr_status.html (+1-1)
``````````diff
diff --git a/clang/test/CXX/drs/cwg9xx.cpp b/clang/test/CXX/drs/cwg9xx.cpp
index c8fdca3a45c3e..a0c659cfc643a 100644
--- a/clang/test/CXX/drs/cwg9xx.cpp
+++ b/clang/test/CXX/drs/cwg9xx.cpp
@@ -169,6 +169,21 @@ enum struct E4 : int { e = static_cast<int>(E4()) };
#endif
} // namespace cwg977
+namespace cwg988 { // cwg988: 2.7
+#if __cplusplus >= 201103L
+void f() {
+ int i;
+ int& lvalue_ref = i;
+ int&& rvalue_ref = static_cast<int&&>(i);
+
+ static_assert(__is_same(decltype(lvalue_ref)&, int&), "");
+ static_assert(__is_same(decltype(lvalue_ref)&&, int&), "");
+ static_assert(__is_same(decltype(rvalue_ref)&, int&), "");
+ static_assert(__is_same(decltype(rvalue_ref)&&, int&&), "");
+}
+#endif
+} // namespace cwg988
+
namespace cwg990 { // cwg990: 3.5
#if __cplusplus >= 201103L
struct A { // #cwg990-A
diff --git a/clang/www/cxx_dr_status.html b/clang/www/cxx_dr_status.html
index feef0c3770f64..add0c344b5f18 100755
--- a/clang/www/cxx_dr_status.html
+++ b/clang/www/cxx_dr_status.html
@@ -6693,7 +6693,7 @@ <h2 id="cxxdr">C++ defect report implementation status</h2>
<td>[<a href="https://wg21.link/dcl.type.simple">dcl.type.simple</a>]</td>
<td>CD2</td>
<td>Reference-to-reference collapsing with <TT>decltype</TT></td>
- <td class="unknown" align="center">Unknown</td>
+ <td class="full" align="center">Clang 2.7</td>
</tr>
<tr id="989">
<td><a href="https://cplusplus.github.io/CWG/issues/989.html">989</a></td>
``````````
</details>
https://github.com/llvm/llvm-project/pull/196889
More information about the cfe-commits
mailing list