-
Notifications
You must be signed in to change notification settings - Fork 12k
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
[clang] Add test for CWG110 "Can template functions and classes be declared in the same scope?" #111446
Conversation
@llvm/pr-subscribers-clang Author: Vlad Serebrennikov (Endilll) ChangesP1787R6: 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: Then it's used as an input for the definition of potentially conflicting declarations given in [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: cplusplus/draft#7284. Full diff: https://github.com/llvm/llvm-project/pull/111446.diff 2 Files Affected:
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>
|
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.
Thanks!
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/30/builds/7857 Here is the relevant piece of the build log for the reference
|
P1787R6:
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:
Then it's used as an input for the definition of potentially conflicting declarations given in [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 note doesn't reflect all of the exceptions from the definition of corresponding declarations in [basic.scope.scope]/4, namely 4.1 and 4.2. I believe the note is defective, and I opened an editorial PR against the draft to fix that: cplusplus/draft#7284.