https://github.com/Endilll created https://github.com/llvm/llvm-project/pull/111446
[P1787R6](https://wg21.link/p1787r6): > [CWG110](https://cplusplus.github.io/CWG/issues/110.html) is resolved by > reducing the restriction in [temp.pre] to a note (matching the behavior of > GCC, Clang, and ICC). Wording: see changes to [temp.pre]/7 I believe the wording for the questions raised in the issue is now the definition of corresponding declarations that is given in [[basic.scope.scope]/4](https://eel.is/c++draft/basic.scope#scope-4): > Two declarations correspond if they (re)introduce the same name, both declare > constructors, or both declare destructors, unless > — either is a using-declarator, or > — one declares a type (not a typedef-name) and the other declares a variable, > non-static data member other than of an anonymous union ([class.union.anon]), > enumerator, function, or function template, or > — each declares a function or function template and they do not declare > corresponding overloads. Then it's used as an input for the definition of potentially conflicting declarations given in [[basic.scope.scope]/6](https://eel.is/c++draft/basic.scope#scope-6). Answering the question in the title: yes, having a function template and a type with the same name that has the same target scope is well-formed. A keen eye might spot that the current [[temp.pre]/7](https://eel.is/c++draft/temp.pre#7) note doesn't reflect all of the exception from corresponding declarations definitions in [basic.scope.scope]/4, namely 4.1 and 4.2. I believe the note is defective, and opened an editorial PR against the draft to fix that: https://github.com/cplusplus/draft/pull/7284. >From 9e427888749e7fc77c0302742de971d69c8c2889 Mon Sep 17 00:00:00 2001 From: Vlad Serebrennikov <serebrennikov.vladis...@gmail.com> Date: Tue, 8 Oct 2024 00:58:48 +0300 Subject: [PATCH] [clang] Add test for CWG110 --- clang/test/CXX/drs/cwg1xx.cpp | 10 ++++++++++ clang/www/cxx_dr_status.html | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/clang/test/CXX/drs/cwg1xx.cpp b/clang/test/CXX/drs/cwg1xx.cpp index d6ee0844458b1d..39423eefc1873f 100644 --- a/clang/test/CXX/drs/cwg1xx.cpp +++ b/clang/test/CXX/drs/cwg1xx.cpp @@ -119,6 +119,16 @@ namespace cwg109 { // cwg109: yes }; } +namespace cwg110 { // cwg110: 2.8 +template <typename> +void f(); + +class f; + +template <typename> +void f(int); +} // namespace cwg110 + namespace cwg111 { // cwg111: dup 535 struct A { A(); A(volatile A&, int = 0); A(A&, const char * = "foo"); }; struct B : A { B(); }; // #cwg111-B diff --git a/clang/www/cxx_dr_status.html b/clang/www/cxx_dr_status.html index ba63106ccc3875..1a67b6103cf43e 100755 --- a/clang/www/cxx_dr_status.html +++ b/clang/www/cxx_dr_status.html @@ -705,7 +705,7 @@ <h2 id="cxxdr">C++ defect report implementation status</h2> <td><a href="https://cplusplus.github.io/CWG/issues/110.html">110</a></td> <td>CD6</td> <td>Can template functions and classes be declared in the same scope?</td> - <td class="unknown" align="center">Unknown</td> + <td class="full" align="center">Clang 2.8</td> </tr> <tr id="111"> <td><a href="https://cplusplus.github.io/CWG/issues/111.html">111</a></td> _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits