[clang] ed128c7 - [clang][NFC] Replace `dr` with `cwg` in DR test suite
Vlad Serebrennikov via cfe-commits
cfe-commits at lists.llvm.org
Fri Apr 12 22:28:54 PDT 2024
Author: Vlad Serebrennikov
Date: 2024-04-13T08:28:44+03:00
New Revision: ed128c7df9b4e60bfd814dc9fd22de1dde4a2c1c
URL: https://github.com/llvm/llvm-project/commit/ed128c7df9b4e60bfd814dc9fd22de1dde4a2c1c
DIFF: https://github.com/llvm/llvm-project/commit/ed128c7df9b4e60bfd814dc9fd22de1dde4a2c1c.diff
LOG: [clang][NFC] Replace `dr` with `cwg` in DR test suite
This patch is breaking `dr` to `cwg` equivalence in our terminology, making room for tests for LWG issues that concern compiler intrinsics.
Added:
clang/test/CXX/drs/cwg118.cpp
clang/test/CXX/drs/cwg124.cpp
clang/test/CXX/drs/cwg158.cpp
clang/test/CXX/drs/cwg1748.cpp
clang/test/CXX/drs/cwg177x.cpp
clang/test/CXX/drs/cwg1807.cpp
clang/test/CXX/drs/cwg185.cpp
clang/test/CXX/drs/cwg193.cpp
clang/test/CXX/drs/cwg199.cpp
clang/test/CXX/drs/cwg201.cpp
clang/test/CXX/drs/cwg210.cpp
clang/test/CXX/drs/cwg2335.cpp
clang/test/CXX/drs/cwg2390.cpp
clang/test/CXX/drs/cwg2504.cpp
clang/test/CXX/drs/cwg292.cpp
clang/test/CXX/drs/cwg392.cpp
clang/test/CXX/drs/cwg412.cpp
clang/test/CXX/drs/cwg438.cpp
clang/test/CXX/drs/cwg439.cpp
clang/test/CXX/drs/cwg441.cpp
clang/test/CXX/drs/cwg462.cpp
clang/test/CXX/drs/cwg492.cpp
clang/test/CXX/drs/cwg519.cpp
clang/test/CXX/drs/cwg571.cpp
clang/test/CXX/drs/cwg605.cpp
clang/test/CXX/drs/cwg650.cpp
clang/test/CXX/drs/cwg653.cpp
clang/test/CXX/drs/cwg658.cpp
clang/test/CXX/drs/cwg661.cpp
clang/test/CXX/drs/cwg672.cpp
clang/test/CXX/drs/cwgr593.cpp
Modified:
clang/test/CXX/drs/dr0xx.cpp
clang/test/CXX/drs/dr10xx.cpp
clang/test/CXX/drs/dr11xx.cpp
clang/test/CXX/drs/dr12xx.cpp
clang/test/CXX/drs/dr13xx.cpp
clang/test/CXX/drs/dr14xx.cpp
clang/test/CXX/drs/dr15xx.cpp
clang/test/CXX/drs/dr16xx.cpp
clang/test/CXX/drs/dr17xx.cpp
clang/test/CXX/drs/dr18xx.cpp
clang/test/CXX/drs/dr19xx.cpp
clang/test/CXX/drs/dr1xx.cpp
clang/test/CXX/drs/dr20xx.cpp
clang/test/CXX/drs/dr21xx.cpp
clang/test/CXX/drs/dr22xx.cpp
clang/test/CXX/drs/dr23xx.cpp
clang/test/CXX/drs/dr24xx.cpp
clang/test/CXX/drs/dr25xx.cpp
clang/test/CXX/drs/dr26xx.cpp
clang/test/CXX/drs/dr27xx.cpp
clang/test/CXX/drs/dr28xx.cpp
clang/test/CXX/drs/dr2xx.cpp
clang/test/CXX/drs/dr3xx.cpp
clang/test/CXX/drs/dr4xx.cpp
clang/test/CXX/drs/dr5xx.cpp
clang/test/CXX/drs/dr6xx.cpp
clang/test/CXX/drs/dr7xx.cpp
clang/test/CXX/drs/dr8xx.cpp
clang/test/CXX/drs/dr9xx.cpp
clang/www/make_cxx_dr_status
Removed:
clang/test/CXX/drs/dr118.cpp
clang/test/CXX/drs/dr124.cpp
clang/test/CXX/drs/dr158.cpp
clang/test/CXX/drs/dr1748.cpp
clang/test/CXX/drs/dr177x.cpp
clang/test/CXX/drs/dr1807.cpp
clang/test/CXX/drs/dr185.cpp
clang/test/CXX/drs/dr193.cpp
clang/test/CXX/drs/dr199.cpp
clang/test/CXX/drs/dr201.cpp
clang/test/CXX/drs/dr210.cpp
clang/test/CXX/drs/dr2335.cpp
clang/test/CXX/drs/dr2390.cpp
clang/test/CXX/drs/dr2504.cpp
clang/test/CXX/drs/dr292.cpp
clang/test/CXX/drs/dr392.cpp
clang/test/CXX/drs/dr412.cpp
clang/test/CXX/drs/dr438.cpp
clang/test/CXX/drs/dr439.cpp
clang/test/CXX/drs/dr441.cpp
clang/test/CXX/drs/dr462.cpp
clang/test/CXX/drs/dr492.cpp
clang/test/CXX/drs/dr519.cpp
clang/test/CXX/drs/dr571.cpp
clang/test/CXX/drs/dr593.cpp
clang/test/CXX/drs/dr605.cpp
clang/test/CXX/drs/dr650.cpp
clang/test/CXX/drs/dr653.cpp
clang/test/CXX/drs/dr658.cpp
clang/test/CXX/drs/dr661.cpp
clang/test/CXX/drs/dr672.cpp
################################################################################
diff --git a/clang/test/CXX/drs/dr118.cpp b/clang/test/CXX/drs/cwg118.cpp
similarity index 98%
rename from clang/test/CXX/drs/dr118.cpp
rename to clang/test/CXX/drs/cwg118.cpp
index 58aa3912c8010f..04e19ce050788c 100644
--- a/clang/test/CXX/drs/dr118.cpp
+++ b/clang/test/CXX/drs/cwg118.cpp
@@ -3,7 +3,7 @@
// RUN: %clang_cc1 -triple x86_64-linux -std=c++14 %s -pedantic-errors -emit-llvm -o - | FileCheck %s --implicit-check-not " call "
// RUN: %clang_cc1 -triple x86_64-linux -std=c++1z %s -pedantic-errors -emit-llvm -o - | FileCheck %s --implicit-check-not " call "
-// dr118: yes
+// cwg118: yes
struct S {
virtual void f();
diff --git a/clang/test/CXX/drs/dr124.cpp b/clang/test/CXX/drs/cwg124.cpp
similarity index 83%
rename from clang/test/CXX/drs/dr124.cpp
rename to clang/test/CXX/drs/cwg124.cpp
index c07beb11709c71..fef3c6085c375f 100644
--- a/clang/test/CXX/drs/dr124.cpp
+++ b/clang/test/CXX/drs/cwg124.cpp
@@ -12,7 +12,7 @@
#define NOTHROW noexcept(true)
#endif
-namespace dr124 { // dr124: 2.7
+namespace cwg124 { // cwg124: 2.7
extern void full_expr_fence() NOTHROW;
@@ -32,20 +32,20 @@ void f() {
full_expr_fence();
}
-// CHECK-LABEL: define {{.*}} void @dr124::f()()
-// CHECK: call void @dr124::full_expr_fence()
+// CHECK-LABEL: define {{.*}} void @cwg124::f()()
+// CHECK: call void @cwg124::full_expr_fence()
// CHECK: br label %arrayctor.loop
// CHECK-LABEL: arrayctor.loop:
-// CHECK: call void @dr124::A::A()
-// CHECK: call void @dr124::B::B(dr124::A)
-// CHECK: call void @dr124::A::~A()
+// CHECK: call void @cwg124::A::A()
+// CHECK: call void @cwg124::B::B(cwg124::A)
+// CHECK: call void @cwg124::A::~A()
// CHECK: br {{.*}}, label %arrayctor.cont, label %arrayctor.loop
// CHECK-LABEL: arrayctor.cont:
-// CHECK: call void @dr124::full_expr_fence()
+// CHECK: call void @cwg124::full_expr_fence()
// CHECK: br label %arraydestroy.body
// CHECK-LABEL: arraydestroy.body:
-// CHECK: call void @dr124::B::~B()
+// CHECK: call void @cwg124::B::~B()
// CHECK-LABEL: }
-} // namespace dr124
+} // namespace cwg124
diff --git a/clang/test/CXX/drs/dr158.cpp b/clang/test/CXX/drs/cwg158.cpp
similarity index 98%
rename from clang/test/CXX/drs/dr158.cpp
rename to clang/test/CXX/drs/cwg158.cpp
index a0a8bd05baee3b..9301c790297e9d 100644
--- a/clang/test/CXX/drs/dr158.cpp
+++ b/clang/test/CXX/drs/cwg158.cpp
@@ -3,7 +3,7 @@
// RUN: %clang_cc1 -triple x86_64-linux -std=c++14 %s -O3 -disable-llvm-passes -pedantic-errors -emit-llvm -o - | FileCheck %s
// RUN: %clang_cc1 -triple x86_64-linux -std=c++1z %s -O3 -disable-llvm-passes -pedantic-errors -emit-llvm -o - | FileCheck %s
-// dr158: yes
+// cwg158: yes
// CHECK-LABEL: define {{.*}} @_Z1f
const int *f(const int * const *p, int **q) {
diff --git a/clang/test/CXX/drs/dr1748.cpp b/clang/test/CXX/drs/cwg1748.cpp
similarity index 98%
rename from clang/test/CXX/drs/dr1748.cpp
rename to clang/test/CXX/drs/cwg1748.cpp
index 7e04f402d26679..f216963d69f2a2 100644
--- a/clang/test/CXX/drs/dr1748.cpp
+++ b/clang/test/CXX/drs/cwg1748.cpp
@@ -3,7 +3,7 @@
// RUN: %clang_cc1 -std=c++14 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | FileCheck %s
// RUN: %clang_cc1 -std=c++1z %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | FileCheck %s
-// dr1748: 3.7
+// cwg1748: 3.7
// FIXME: __SIZE_TYPE__ expands to 'long long' on some targets.
__extension__ typedef __SIZE_TYPE__ size_t;
diff --git a/clang/test/CXX/drs/dr177x.cpp b/clang/test/CXX/drs/cwg177x.cpp
similarity index 95%
rename from clang/test/CXX/drs/dr177x.cpp
rename to clang/test/CXX/drs/cwg177x.cpp
index 7b96ff0996c72b..cc62bdac4cf06a 100644
--- a/clang/test/CXX/drs/dr177x.cpp
+++ b/clang/test/CXX/drs/cwg177x.cpp
@@ -4,9 +4,9 @@
// RUN: %clang_cc1 -std=c++1z %s -fexceptions -fcxx-exceptions -pedantic-errors -ast-dump | FileCheck %s --check-prefixes=CHECK,CXX11,CXX14
// RUN: %clang_cc1 -std=c++1z %s -fexceptions -fcxx-exceptions -pedantic-errors -triple i386-windows-pc -ast-dump | FileCheck %s --check-prefixes=CHECK,CXX11,CXX14
-namespace dr1772 { // dr1772: 14
+namespace cwg1772 { // cwg1772: 14
// __func__ in a lambda should name operator(), not the containing function.
- // CHECK: NamespaceDecl{{.+}}dr1772
+ // CHECK: NamespaceDecl{{.+}}cwg1772
#if __cplusplus >= 201103L
auto x = []() { __func__; };
// CXX11: LambdaExpr
@@ -30,10 +30,10 @@ namespace dr1772 { // dr1772: 14
#endif // __cplusplus >= 201103L
}
-namespace dr1779 { // dr1779: 14
+namespace cwg1779 { // cwg1779: 14
// __func__ in a function template, member function template, or generic
// lambda should have a dependent type.
- // CHECK: NamespaceDecl{{.+}}dr1779
+ // CHECK: NamespaceDecl{{.+}}cwg1779
template<typename T>
void FuncTemplate() {
diff --git a/clang/test/CXX/drs/dr1807.cpp b/clang/test/CXX/drs/cwg1807.cpp
similarity index 83%
rename from clang/test/CXX/drs/dr1807.cpp
rename to clang/test/CXX/drs/cwg1807.cpp
index 81e1e8ca640e3e..59edacc49658c6 100644
--- a/clang/test/CXX/drs/dr1807.cpp
+++ b/clang/test/CXX/drs/cwg1807.cpp
@@ -6,7 +6,7 @@
// RUN: %clang_cc1 -std=c++23 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK,SINCE-CXX11
// RUN: %clang_cc1 -std=c++2c %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK,SINCE-CXX11
-namespace dr1807 { // dr1807: 3.0
+namespace cwg1807 { // cwg1807: 3.0
struct S {
S() {}
~S() {}
@@ -17,12 +17,12 @@ void f() {
}
}
-// CHECK-LABEL: define dso_local void @dr1807::f()
-// CHECK: invoke void @dr1807::S::S(){{.+}}
+// CHECK-LABEL: define dso_local void @cwg1807::f()
+// CHECK: invoke void @cwg1807::S::S(){{.+}}
// CHECK-NEXT: {{.+}} unwind label %lpad
// CHECK-LABEL: lpad:
// CHECK: br {{.+}}, label {{.+}}, label %arraydestroy.body
// CHECK-LABEL: arraydestroy.body:
// CHECK: [[ARRAYDESTROY_ELEMENT:%.*]] = getelementptr {{.+}}, i64 -1
-// CXX98-NEXT: invoke void @dr1807::S::~S()({{.*}}[[ARRAYDESTROY_ELEMENT]])
-// SINCE-CXX11-NEXT: call void @dr1807::S::~S()({{.*}}[[ARRAYDESTROY_ELEMENT]])
+// CXX98-NEXT: invoke void @cwg1807::S::~S()({{.*}}[[ARRAYDESTROY_ELEMENT]])
+// SINCE-CXX11-NEXT: call void @cwg1807::S::~S()({{.*}}[[ARRAYDESTROY_ELEMENT]])
diff --git a/clang/test/CXX/drs/dr185.cpp b/clang/test/CXX/drs/cwg185.cpp
similarity index 85%
rename from clang/test/CXX/drs/dr185.cpp
rename to clang/test/CXX/drs/cwg185.cpp
index aff00f1a8764ab..8ab5bc5d28f821 100644
--- a/clang/test/CXX/drs/dr185.cpp
+++ b/clang/test/CXX/drs/cwg185.cpp
@@ -6,7 +6,7 @@
// RUN: %clang_cc1 -std=c++23 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
// RUN: %clang_cc1 -std=c++2c %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
-namespace dr185 { // dr185: 2.7
+namespace cwg185 { // cwg185: 2.7
struct A {
mutable int value;
explicit A(int i) : value(i) {}
@@ -20,11 +20,11 @@ int foo() {
return n.value;
}
-// CHECK-LABEL: define {{.*}} i32 @dr185::foo()
-// CHECK: call void @dr185::A::A(int)(ptr {{[^,]*}} %ref.tmp, {{.*}})
+// CHECK-LABEL: define {{.*}} i32 @cwg185::foo()
+// CHECK: call void @cwg185::A::A(int)(ptr {{[^,]*}} %ref.tmp, {{.*}})
// CHECK: store ptr %ref.tmp, ptr %t
// CHECK-NOT: %t =
-// CHECK: [[DR185_T:%.+]] = load ptr, ptr %t
-// CHECK: call void @llvm.memcpy.p0.p0.i64(ptr {{[^,]*}} %n, ptr {{[^,]*}} [[DR185_T]], {{.*}})
+// CHECK: [[CWG185_T:%.+]] = load ptr, ptr %t
+// CHECK: call void @llvm.memcpy.p0.p0.i64(ptr {{[^,]*}} %n, ptr {{[^,]*}} [[CWG185_T]], {{.*}})
// CHECK-LABEL: }
-} // namespace dr185
+} // namespace cwg185
diff --git a/clang/test/CXX/drs/dr193.cpp b/clang/test/CXX/drs/cwg193.cpp
similarity index 79%
rename from clang/test/CXX/drs/dr193.cpp
rename to clang/test/CXX/drs/cwg193.cpp
index c010dad50e4035..0a6ac38941d208 100644
--- a/clang/test/CXX/drs/dr193.cpp
+++ b/clang/test/CXX/drs/cwg193.cpp
@@ -12,7 +12,7 @@
#define NOTHROW noexcept(true)
#endif
-namespace dr193 { // dr193: 2.7
+namespace cwg193 { // cwg193: 2.7
struct A {
~A() NOTHROW {}
};
@@ -35,12 +35,12 @@ void foo() {
}
// skipping over D1 (complete object destructor)
-// CHECK-LABEL: define {{.*}} void @dr193::D::~D(){{.*}}
-// CHECK-LABEL: define {{.*}} void @dr193::D::~D(){{.*}}
-// CHECK-NOT: call void @dr193::A::~A()
-// CHECK-NOT: call void @dr193::B::~B()
-// CHECK: call void @dr193::C::~C()
-// CHECK: call void @dr193::B::~B()
-// CHECK: call void @dr193::A::~A()
+// CHECK-LABEL: define {{.*}} void @cwg193::D::~D(){{.*}}
+// CHECK-LABEL: define {{.*}} void @cwg193::D::~D(){{.*}}
+// CHECK-NOT: call void @cwg193::A::~A()
+// CHECK-NOT: call void @cwg193::B::~B()
+// CHECK: call void @cwg193::C::~C()
+// CHECK: call void @cwg193::B::~B()
+// CHECK: call void @cwg193::A::~A()
// CHECK-LABEL: }
-} // namespace dr193
+} // namespace cwg193
diff --git a/clang/test/CXX/drs/dr199.cpp b/clang/test/CXX/drs/cwg199.cpp
similarity index 85%
rename from clang/test/CXX/drs/dr199.cpp
rename to clang/test/CXX/drs/cwg199.cpp
index 7517d79680c6fd..5d2e5110786f15 100644
--- a/clang/test/CXX/drs/dr199.cpp
+++ b/clang/test/CXX/drs/cwg199.cpp
@@ -12,7 +12,7 @@
#define NOTHROW noexcept(true)
#endif
-namespace dr199 { // dr199: 2.8
+namespace cwg199 { // cwg199: 2.8
struct A {
~A() NOTHROW {}
};
@@ -25,9 +25,9 @@ void foo() {
A(), B();
}
-// CHECK-LABEL: define {{.*}} void @dr199::foo()
-// CHECK-NOT: call void @dr199::A::~A()
-// CHECK: call void @dr199::B::~B()
-// CHECK: call void @dr199::A::~A()
+// CHECK-LABEL: define {{.*}} void @cwg199::foo()
+// CHECK-NOT: call void @cwg199::A::~A()
+// CHECK: call void @cwg199::B::~B()
+// CHECK: call void @cwg199::A::~A()
// CHECK-LABEL: }
-} // namespace dr199
+} // namespace cwg199
diff --git a/clang/test/CXX/drs/dr201.cpp b/clang/test/CXX/drs/cwg201.cpp
similarity index 82%
rename from clang/test/CXX/drs/dr201.cpp
rename to clang/test/CXX/drs/cwg201.cpp
index 7e864981e13be7..b6cf92a1fc7489 100644
--- a/clang/test/CXX/drs/dr201.cpp
+++ b/clang/test/CXX/drs/cwg201.cpp
@@ -12,7 +12,7 @@
#define NOTHROW noexcept(true)
#endif
-namespace dr201 { // dr201: 2.8
+namespace cwg201 { // cwg201: 2.8
extern void full_expr_fence() NOTHROW;
@@ -31,12 +31,12 @@ void foo() {
full_expr_fence();
}
-// CHECK-LABEL: define {{.*}} void @dr201::foo()
-// CHECK: call void @dr201::full_expr_fence()
-// CHECK: call void @dr201::B::B(dr201::A)
-// CHECK: call void @dr201::A::~A()
-// CHECK: call void @dr201::full_expr_fence()
-// CHECK: call void @dr201::B::~B()
+// CHECK-LABEL: define {{.*}} void @cwg201::foo()
+// CHECK: call void @cwg201::full_expr_fence()
+// CHECK: call void @cwg201::B::B(cwg201::A)
+// CHECK: call void @cwg201::A::~A()
+// CHECK: call void @cwg201::full_expr_fence()
+// CHECK: call void @cwg201::B::~B()
// CHECK-LABEL: }
-} // namespace dr201
+} // namespace cwg201
diff --git a/clang/test/CXX/drs/dr210.cpp b/clang/test/CXX/drs/cwg210.cpp
similarity index 91%
rename from clang/test/CXX/drs/dr210.cpp
rename to clang/test/CXX/drs/cwg210.cpp
index 156ee81093b43c..2c3cf61a6a5b1a 100644
--- a/clang/test/CXX/drs/dr210.cpp
+++ b/clang/test/CXX/drs/cwg210.cpp
@@ -13,7 +13,7 @@
#pragma clang diagnostic pop
#endif
-namespace dr210 { // dr210: 2.7
+namespace cwg210 { // cwg210: 2.7
struct B {
long i;
B();
@@ -33,9 +33,9 @@ void toss(const B* b) {
throw *b;
}
-// CHECK-LABEL: define {{.*}} void @dr210::toss(dr210::B const*)
+// CHECK-LABEL: define {{.*}} void @cwg210::toss(cwg210::B const*)
// CHECK: %[[EXCEPTION:.*]] = call ptr @__cxa_allocate_exception(i64 16)
-// CHECK: call void @__cxa_throw(ptr %[[EXCEPTION]], ptr @typeinfo for dr210::B, ptr @dr210::B::~B())
+// CHECK: call void @__cxa_throw(ptr %[[EXCEPTION]], ptr @typeinfo for cwg210::B, ptr @cwg210::B::~B())
// CHECK-LABEL: }
-} // namespace dr210
+} // namespace cwg210
diff --git a/clang/test/CXX/drs/dr2335.cpp b/clang/test/CXX/drs/cwg2335.cpp
similarity index 56%
rename from clang/test/CXX/drs/dr2335.cpp
rename to clang/test/CXX/drs/cwg2335.cpp
index 33eebb2c4a5c57..8b00a9d2d98a5e 100644
--- a/clang/test/CXX/drs/dr2335.cpp
+++ b/clang/test/CXX/drs/cwg2335.cpp
@@ -10,7 +10,7 @@
// expected-no-diagnostics
#endif
-namespace dr2335 { // dr2335: no drafting 2018-06
+namespace cwg2335 { // cwg2335: no drafting 2018-06
// FIXME: current consensus is that the examples are well-formed.
#if __cplusplus >= 201402L
namespace ex1 {
@@ -25,24 +25,24 @@ namespace ex2 {
template <int> struct X {};
template <class T> struct partition_indices {
static auto compute_right() { return X<I>(); }
- // since-cxx14-error at -1 {{no member 'I' in 'dr2335::ex2::partition_indices<int>'; it has not yet been instantiated}}
- // since-cxx14-note@#dr2335-ex2-right {{in instantiation of member function 'dr2335::ex2::partition_indices<int>::compute_right' requested here}}
- // since-cxx14-note@#dr2335-ex2-inst {{in instantiation of template class 'dr2335::ex2::partition_indices<int>' requested here}}
- // since-cxx14-note@#dr2335-ex2-I {{not-yet-instantiated member is declared here}}
- static constexpr auto right = compute_right; // #dr2335-ex2-right
- static constexpr int I = sizeof(T); // #dr2335-ex2-I
+ // since-cxx14-error at -1 {{no member 'I' in 'cwg2335::ex2::partition_indices<int>'; it has not yet been instantiated}}
+ // since-cxx14-note@#cwg2335-ex2-right {{in instantiation of member function 'cwg2335::ex2::partition_indices<int>::compute_right' requested here}}
+ // since-cxx14-note@#cwg2335-ex2-inst {{in instantiation of template class 'cwg2335::ex2::partition_indices<int>' requested here}}
+ // since-cxx14-note@#cwg2335-ex2-I {{not-yet-instantiated member is declared here}}
+ static constexpr auto right = compute_right; // #cwg2335-ex2-right
+ static constexpr int I = sizeof(T); // #cwg2335-ex2-I
};
-template struct partition_indices<int>; // #dr2335-ex2-inst
+template struct partition_indices<int>; // #cwg2335-ex2-inst
} // namespace ex2
namespace ex3 {
struct partition_indices {
- static auto compute_right() {} // #dr2335-compute_right
- static constexpr auto right = compute_right; // #dr2335-ex3-right
+ static auto compute_right() {} // #cwg2335-compute_right
+ static constexpr auto right = compute_right; // #cwg2335-ex3-right
// since-cxx14-error at -1 {{function 'compute_right' with deduced return type cannot be used before it is defined}}
- // since-cxx14-note@#dr2335-compute_right {{'compute_right' declared here}}
- // since-cxx14-error@#dr2335-ex3-right {{declaration of variable 'right' with deduced type 'const auto' requires an initializer}}
+ // since-cxx14-note@#cwg2335-compute_right {{'compute_right' declared here}}
+ // since-cxx14-error@#cwg2335-ex3-right {{declaration of variable 'right' with deduced type 'const auto' requires an initializer}}
};
} // namespace ex3
#endif
-} // namespace dr2335
+} // namespace cwg2335
diff --git a/clang/test/CXX/drs/dr2390.cpp b/clang/test/CXX/drs/cwg2390.cpp
similarity index 98%
rename from clang/test/CXX/drs/dr2390.cpp
rename to clang/test/CXX/drs/cwg2390.cpp
index 3931365b568ceb..41bbd0d1c5499a 100644
--- a/clang/test/CXX/drs/dr2390.cpp
+++ b/clang/test/CXX/drs/cwg2390.cpp
@@ -1,6 +1,6 @@
// RUN: %clang_cc1 -E -P %s -o - | FileCheck %s
-// dr2390: 14
+// cwg2390: 14
namespace PR48462 {
// Test that macro expansion of the builtin argument works.
diff --git a/clang/test/CXX/drs/dr2504.cpp b/clang/test/CXX/drs/cwg2504.cpp
similarity index 90%
rename from clang/test/CXX/drs/dr2504.cpp
rename to clang/test/CXX/drs/cwg2504.cpp
index 686ea73cd6a0ee..fa775df327cbe2 100644
--- a/clang/test/CXX/drs/dr2504.cpp
+++ b/clang/test/CXX/drs/cwg2504.cpp
@@ -6,7 +6,7 @@
// RUN: %clang_cc1 -std=c++23 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK,SINCE-CXX11
// RUN: %clang_cc1 -std=c++2c %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK,SINCE-CXX11
-namespace dr2504 { // dr2504: no
+namespace cwg2504 { // cwg2504: no
#if __cplusplus >= 201103L
struct V { V() = default; V(int); };
struct Q { Q(); };
@@ -27,11 +27,11 @@ void foo() { C c; } // bar is not invoked, because the V subobject is not initia
// we are not supposed to unconditionally call `bar()` and call a constructor
// inherited from `V`.
-// SINCE-CXX11-LABEL: define linkonce_odr void @dr2504::B::B()
+// SINCE-CXX11-LABEL: define linkonce_odr void @cwg2504::B::B()
// SINCE-CXX11-NOT: br
-// SINCE-CXX11: call noundef i32 @dr2504::bar()
+// SINCE-CXX11: call noundef i32 @cwg2504::bar()
// SINCE-CXX11-NOT: br
-// SINCE-CXX11: call void @dr2504::A::A(int)
+// SINCE-CXX11: call void @cwg2504::A::A(int)
// SINCE-CXX11-LABEL: }
// CHECK: {{.*}}
diff --git a/clang/test/CXX/drs/dr292.cpp b/clang/test/CXX/drs/cwg292.cpp
similarity index 91%
rename from clang/test/CXX/drs/dr292.cpp
rename to clang/test/CXX/drs/cwg292.cpp
index 19caeef291fa71..b05d3b92d6275f 100644
--- a/clang/test/CXX/drs/dr292.cpp
+++ b/clang/test/CXX/drs/cwg292.cpp
@@ -6,7 +6,7 @@
// RUN: %clang_cc1 -std=c++23 %s -triple x86_64-linux-gnu -emit-llvm -disable-llvm-passes -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
// RUN: %clang_cc1 -std=c++2c %s -triple x86_64-linux-gnu -emit-llvm -disable-llvm-passes -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
-namespace dr292 { // dr292: 2.9
+namespace cwg292 { // cwg292: 2.9
extern int g();
@@ -18,13 +18,13 @@ void f() {
new A(g());
}
-// CHECK-LABEL: define {{.*}} void @dr292::f()()
+// CHECK-LABEL: define {{.*}} void @cwg292::f()()
// CHECK: %[[CALL:.+]] = call {{.*}} @operator new(unsigned long)({{.*}})
-// CHECK: invoke {{.*}} i32 @dr292::g()()
+// CHECK: invoke {{.*}} i32 @cwg292::g()()
// CHECK-NEXT: to {{.*}} unwind label %lpad
// CHECK-LABEL: lpad:
// CHECK: call void @operator delete(void*)(ptr {{.*}} %[[CALL]])
// CHECK-LABEL: eh.resume:
// CHECK-LABEL: }
-} // namespace dr292
+} // namespace cwg292
diff --git a/clang/test/CXX/drs/dr392.cpp b/clang/test/CXX/drs/cwg392.cpp
similarity index 88%
rename from clang/test/CXX/drs/dr392.cpp
rename to clang/test/CXX/drs/cwg392.cpp
index 26e6259f71961d..e118dd7bdb5ca0 100644
--- a/clang/test/CXX/drs/dr392.cpp
+++ b/clang/test/CXX/drs/cwg392.cpp
@@ -12,7 +12,7 @@
#define NOTHROW noexcept(true)
#endif
-namespace dr392 { // dr392: 2.8
+namespace cwg392 { // cwg392: 2.8
struct A {
operator bool() NOTHROW;
@@ -32,9 +32,9 @@ void f()
if (C().get()) {}
}
-} // namespace dr392
+} // namespace cwg392
-// CHECK-LABEL: define {{.*}} void @dr392::f()()
-// CHECK: call {{.*}} i1 @dr392::A::operator bool()
-// CHECK: call void @dr392::C::~C()
+// CHECK-LABEL: define {{.*}} void @cwg392::f()()
+// CHECK: call {{.*}} i1 @cwg392::A::operator bool()
+// CHECK: call void @cwg392::C::~C()
// CHECK-LABEL: }
diff --git a/clang/test/CXX/drs/dr412.cpp b/clang/test/CXX/drs/cwg412.cpp
similarity index 99%
rename from clang/test/CXX/drs/dr412.cpp
rename to clang/test/CXX/drs/cwg412.cpp
index 8ea29135d1df82..7e75bececac87c 100644
--- a/clang/test/CXX/drs/dr412.cpp
+++ b/clang/test/CXX/drs/cwg412.cpp
@@ -6,7 +6,7 @@
// RUN: %clang_cc1 -std=c++23 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -DNOEXCEPT=noexcept -DBAD_ALLOC=
// RUN: %clang_cc1 -std=c++2c %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -DNOEXCEPT=noexcept -DBAD_ALLOC=
-// dr412: 3.4
+// cwg412: 3.4
// lwg404: yes
// lwg2340: yes
diff --git a/clang/test/CXX/drs/dr438.cpp b/clang/test/CXX/drs/cwg438.cpp
similarity index 94%
rename from clang/test/CXX/drs/dr438.cpp
rename to clang/test/CXX/drs/cwg438.cpp
index a6ed39b88c2420..5f2fb7c70d879b 100644
--- a/clang/test/CXX/drs/dr438.cpp
+++ b/clang/test/CXX/drs/cwg438.cpp
@@ -6,7 +6,7 @@
// RUN: %clang_cc1 -std=c++23 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
// RUN: %clang_cc1 -std=c++2c %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
-namespace dr438 { // dr438: 2.7
+namespace cwg438 { // cwg438: 2.7
void f() {
long A[2];
@@ -14,9 +14,9 @@ void f() {
A[A[0]] = 1;
}
-} // namespace dr438
+} // namespace cwg438
-// CHECK-LABEL: define {{.*}} void @dr438::f()()
+// CHECK-LABEL: define {{.*}} void @cwg438::f()()
// CHECK: [[A:%.+]] = alloca [2 x i64]
// CHECK: {{.+}} = getelementptr inbounds [2 x i64], ptr [[A]], i64 0, i64 0
// CHECK: [[ARRAYIDX1:%.+]] = getelementptr inbounds [2 x i64], ptr [[A]], i64 0, i64 0
diff --git a/clang/test/CXX/drs/dr439.cpp b/clang/test/CXX/drs/cwg439.cpp
similarity index 94%
rename from clang/test/CXX/drs/dr439.cpp
rename to clang/test/CXX/drs/cwg439.cpp
index 46960af93bb9aa..e409b803797fab 100644
--- a/clang/test/CXX/drs/dr439.cpp
+++ b/clang/test/CXX/drs/cwg439.cpp
@@ -6,7 +6,7 @@
// RUN: %clang_cc1 -std=c++23 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
// RUN: %clang_cc1 -std=c++2c %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
-namespace dr439 { // dr439: 2.7
+namespace cwg439 { // cwg439: 2.7
void f() {
int* p1 = new int;
@@ -14,12 +14,12 @@ void f() {
bool b = p1 == p2; // b will have the value true.
}
-} // namespace dr439
+} // namespace cwg439
// We're checking that p2 was copied from p1, and then was carried over
// to the comparison without change.
-// CHECK-LABEL: define {{.*}} void @dr439::f()()
+// CHECK-LABEL: define {{.*}} void @cwg439::f()()
// CHECK: [[P1:%.+]] = alloca ptr, align 8
// CHECK-NEXT: [[P2:%.+]] = alloca ptr, align 8
// CHECK: [[TEMP0:%.+]] = load ptr, ptr [[P1]]
diff --git a/clang/test/CXX/drs/dr441.cpp b/clang/test/CXX/drs/cwg441.cpp
similarity index 76%
rename from clang/test/CXX/drs/dr441.cpp
rename to clang/test/CXX/drs/cwg441.cpp
index 6504bba689d225..5f566f2301936b 100644
--- a/clang/test/CXX/drs/dr441.cpp
+++ b/clang/test/CXX/drs/cwg441.cpp
@@ -6,7 +6,7 @@
// RUN: %clang_cc1 -std=c++23 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
// RUN: %clang_cc1 -std=c++2c %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
-namespace dr441 { // dr441: 2.7
+namespace cwg441 { // cwg441: 2.7
struct A {
A() {}
@@ -17,21 +17,21 @@ int i;
int& ir = i;
int* ip = &i;
-} // namespace dr441
+} // namespace cwg441
-// CHECK-DAG: @dr441::dynamic_init = global %"struct.dr441::A" zeroinitializer
-// CHECK-DAG: @dr441::i = global i32 0
-// CHECK-DAG: @dr441::ir = constant ptr @dr441::i
-// CHECK-DAG: @dr441::ip = global ptr @dr441::i
-// CHECK-DAG: @llvm.global_ctors = appending global [{{.+}}] [{ {{.+}} } { {{.+}}, ptr @_GLOBAL__sub_I_dr441.cpp, {{.+}} }]
+// CHECK-DAG: @cwg441::dynamic_init = global %"struct.cwg441::A" zeroinitializer
+// CHECK-DAG: @cwg441::i = global i32 0
+// CHECK-DAG: @cwg441::ir = constant ptr @cwg441::i
+// CHECK-DAG: @cwg441::ip = global ptr @cwg441::i
+// CHECK-DAG: @llvm.global_ctors = appending global [{{.+}}] [{ {{.+}} } { {{.+}}, ptr @_GLOBAL__sub_I_cwg441.cpp, {{.+}} }]
// CHECK-LABEL: define {{.*}} void @__cxx_global_var_init()
// CHECK-NEXT: entry:
-// CHECK-NEXT: call void @dr441::A::A()({{.*}} @dr441::dynamic_init)
+// CHECK-NEXT: call void @cwg441::A::A()({{.*}} @cwg441::dynamic_init)
// CHECK-NEXT: ret void
// CHECK-NEXT: }
-// CHECK-LABEL: define {{.*}} void @_GLOBAL__sub_I_dr441.cpp()
+// CHECK-LABEL: define {{.*}} void @_GLOBAL__sub_I_cwg441.cpp()
// CHECK-NEXT: entry:
// CHECK-NEXT: call void @__cxx_global_var_init()
// CHECK-NEXT: ret void
diff --git a/clang/test/CXX/drs/dr462.cpp b/clang/test/CXX/drs/cwg462.cpp
similarity index 87%
rename from clang/test/CXX/drs/dr462.cpp
rename to clang/test/CXX/drs/cwg462.cpp
index 2b268778ea10da..bdbcacd733bbbe 100644
--- a/clang/test/CXX/drs/dr462.cpp
+++ b/clang/test/CXX/drs/cwg462.cpp
@@ -12,7 +12,7 @@
#define NOTHROW noexcept(true)
#endif
-namespace dr462 { // dr462: 2.7
+namespace cwg462 { // cwg462: 2.7
struct A {
~A() NOTHROW {}
@@ -25,9 +25,9 @@ void f() {
full_expr_fence();
}
-} // namespace dr462
+} // namespace cwg462
-// CHECK-LABEL: define {{.*}} void @dr462::f()()
-// CHECK: call void @dr462::full_expr_fence()()
-// CHECK: call void @dr462::A::~A()
+// CHECK-LABEL: define {{.*}} void @cwg462::f()()
+// CHECK: call void @cwg462::full_expr_fence()()
+// CHECK: call void @cwg462::A::~A()
// CHECK-LABEL: }
diff --git a/clang/test/CXX/drs/dr492.cpp b/clang/test/CXX/drs/cwg492.cpp
similarity index 94%
rename from clang/test/CXX/drs/dr492.cpp
rename to clang/test/CXX/drs/cwg492.cpp
index f53f1cb5412404..7fc46b04d72bd3 100644
--- a/clang/test/CXX/drs/dr492.cpp
+++ b/clang/test/CXX/drs/cwg492.cpp
@@ -18,7 +18,7 @@ struct type_info {
};
}
-namespace dr492 { // dr492: 2.7
+namespace cwg492 { // cwg492: 2.7
void f() {
typeid(int).name();
@@ -27,9 +27,9 @@ void f() {
typeid(const volatile int).name();
}
-} // namespace dr492
+} // namespace cwg492
-// CHECK-LABEL: define {{.*}} void @dr492::f()()
+// CHECK-LABEL: define {{.*}} void @cwg492::f()()
// CHECK: {{.*}} = call {{.*}} @std::type_info::name() const({{.*}} @typeinfo for int)
// CHECK-NEXT: {{.*}} = call {{.*}} @std::type_info::name() const({{.*}} @typeinfo for int)
// CHECK-NEXT: {{.*}} = call {{.*}} @std::type_info::name() const({{.*}} @typeinfo for int)
diff --git a/clang/test/CXX/drs/dr519.cpp b/clang/test/CXX/drs/cwg519.cpp
similarity index 95%
rename from clang/test/CXX/drs/dr519.cpp
rename to clang/test/CXX/drs/cwg519.cpp
index 67c01d95ef7c6f..ce8a1cc95f600b 100644
--- a/clang/test/CXX/drs/dr519.cpp
+++ b/clang/test/CXX/drs/cwg519.cpp
@@ -6,7 +6,7 @@
// RUN: %clang_cc1 -std=c++23 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
// RUN: %clang_cc1 -std=c++2c %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
-namespace dr519 { // dr519: 2.7
+namespace cwg519 { // cwg519: 2.7
void f() {
int *a = 0;
void *v = a;
@@ -16,12 +16,12 @@ void f() {
int *b = static_cast<int*>(w);
bool c2 = b == static_cast<int *>(0);
}
-} // namespace dr519
+} // namespace cwg519
// We're checking that `null`s that were initially stored in `a` and `w`
// are simply copied over all the way to respective comparisons with `null`.
-// CHECK-LABEL: define {{.*}} void @dr519::f()()
+// CHECK-LABEL: define {{.*}} void @cwg519::f()()
// CHECK: store ptr null, ptr [[A:%.+]],
// CHECK-NEXT: [[TEMP_A:%.+]] = load ptr, ptr [[A]]
// CHECK-NEXT: store ptr [[TEMP_A]], ptr [[V:%.+]],
diff --git a/clang/test/CXX/drs/dr571.cpp b/clang/test/CXX/drs/cwg571.cpp
similarity index 91%
rename from clang/test/CXX/drs/dr571.cpp
rename to clang/test/CXX/drs/cwg571.cpp
index 19a85b7ddc3508..9f0f455fb72760 100644
--- a/clang/test/CXX/drs/dr571.cpp
+++ b/clang/test/CXX/drs/cwg571.cpp
@@ -6,7 +6,7 @@
// RUN: %clang_cc1 -std=c++23 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
// RUN: %clang_cc1 -std=c++2c %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
-namespace dr571 { // dr571: 2.7
+namespace cwg571 { // cwg571: 2.7
typedef int &ir;
int n;
const ir r = n;
@@ -16,5 +16,5 @@ namespace dr571 { // dr571: 2.7
// Entities have external linkage by default.
-// CHECK: @dr571::r = constant ptr @dr571::n
-// CHECK: @dr571::r2 = constant ptr @dr571::n
+// CHECK: @cwg571::r = constant ptr @cwg571::n
+// CHECK: @cwg571::r2 = constant ptr @cwg571::n
diff --git a/clang/test/CXX/drs/dr605.cpp b/clang/test/CXX/drs/cwg605.cpp
similarity index 91%
rename from clang/test/CXX/drs/dr605.cpp
rename to clang/test/CXX/drs/cwg605.cpp
index 6c212d8dabc06c..2fd9e8155bf77b 100644
--- a/clang/test/CXX/drs/dr605.cpp
+++ b/clang/test/CXX/drs/cwg605.cpp
@@ -6,7 +6,7 @@
// RUN: %clang_cc1 -std=c++23 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
// RUN: %clang_cc1 -std=c++2c %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
-namespace dr605 { // dr605: 2.7
+namespace cwg605 { // cwg605: 2.7
template <class T>
static T f(T t) {}
@@ -18,6 +18,6 @@ void g(int a) {
f(a);
}
-} // namespace dr605
+} // namespace cwg605
-// CHECK: define internal {{.*}} i32 @int dr605::f<int>(int)
+// CHECK: define internal {{.*}} i32 @int cwg605::f<int>(int)
diff --git a/clang/test/CXX/drs/dr650.cpp b/clang/test/CXX/drs/cwg650.cpp
similarity index 86%
rename from clang/test/CXX/drs/dr650.cpp
rename to clang/test/CXX/drs/cwg650.cpp
index 715b4fdf04a7f0..dcb844095b0598 100644
--- a/clang/test/CXX/drs/dr650.cpp
+++ b/clang/test/CXX/drs/cwg650.cpp
@@ -12,7 +12,7 @@
#define NOTHROW noexcept(true)
#endif
-namespace dr650 { // dr650: 2.8
+namespace cwg650 { // cwg650: 2.8
struct Q {
~Q() NOTHROW;
@@ -31,10 +31,10 @@ const S& f() {
return (R(), S());
}
-} // namespace dr650
+} // namespace cwg650
-// CHECK-LABEL: define {{.*}} @dr650::f()()
-// CHECK: call void @dr650::S::~S()
-// CHECK: call void @dr650::R::~R()
-// CHECK: call void @dr650::Q::~Q()
+// CHECK-LABEL: define {{.*}} @cwg650::f()()
+// CHECK: call void @cwg650::S::~S()
+// CHECK: call void @cwg650::R::~R()
+// CHECK: call void @cwg650::Q::~Q()
// CHECK-LABEL: }
diff --git a/clang/test/CXX/drs/dr653.cpp b/clang/test/CXX/drs/cwg653.cpp
similarity index 92%
rename from clang/test/CXX/drs/dr653.cpp
rename to clang/test/CXX/drs/cwg653.cpp
index fd1f0153bfb74e..3aeb394347ea60 100644
--- a/clang/test/CXX/drs/dr653.cpp
+++ b/clang/test/CXX/drs/cwg653.cpp
@@ -6,7 +6,7 @@
// RUN: %clang_cc1 -std=c++23 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
// RUN: %clang_cc1 -std=c++2c %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
-namespace dr653 { // dr653: 2.7
+namespace cwg653 { // cwg653: 2.7
union U {
int a;
@@ -18,8 +18,8 @@ void f(U u) {
v = u;
}
-} // namespace dr653
+} // namespace cwg653
-// CHECK-LABEL: define {{.*}} void @dr653::f(dr653::U)
+// CHECK-LABEL: define {{.*}} void @cwg653::f(cwg653::U)
// CHECK: call void @llvm.memcpy.p0.p0.i64(ptr {{.*}} %v, ptr {{.*}} %u, {{.*}})
// CHECK-LABEL: }
diff --git a/clang/test/CXX/drs/dr658.cpp b/clang/test/CXX/drs/cwg658.cpp
similarity index 92%
rename from clang/test/CXX/drs/dr658.cpp
rename to clang/test/CXX/drs/cwg658.cpp
index 51034c2af3bf31..2f7f1ad7deda56 100644
--- a/clang/test/CXX/drs/dr658.cpp
+++ b/clang/test/CXX/drs/cwg658.cpp
@@ -6,17 +6,17 @@
// RUN: %clang_cc1 -std=c++23 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
// RUN: %clang_cc1 -std=c++2c %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
-namespace dr658 { // dr658: 2.7
+namespace cwg658 { // cwg658: 2.7
void f(int* p1) {
char* p2 = reinterpret_cast<char*>(p1);
}
-} // namespace dr658
+} // namespace cwg658
// We're checking that p1 is stored into p2 without changes.
-// CHECK-LABEL: define {{.*}} void @dr658::f(int*)(ptr noundef %p1)
+// CHECK-LABEL: define {{.*}} void @cwg658::f(int*)(ptr noundef %p1)
// CHECK: [[P1_ADDR:%.+]] = alloca ptr, align 8
// CHECK-NEXT: [[P2:%.+]] = alloca ptr, align 8
// CHECK: store ptr %p1, ptr [[P1_ADDR]]
diff --git a/clang/test/CXX/drs/dr661.cpp b/clang/test/CXX/drs/cwg661.cpp
similarity index 91%
rename from clang/test/CXX/drs/dr661.cpp
rename to clang/test/CXX/drs/cwg661.cpp
index 4e97bb7088476f..55721317107088 100644
--- a/clang/test/CXX/drs/dr661.cpp
+++ b/clang/test/CXX/drs/cwg661.cpp
@@ -6,9 +6,9 @@
// RUN: %clang_cc1 -std=c++23 %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
// RUN: %clang_cc1 -std=c++2c %s -triple x86_64-linux-gnu -emit-llvm -o - -fexceptions -fcxx-exceptions -pedantic-errors | llvm-cxxfilt -n | FileCheck %s --check-prefixes CHECK
-namespace dr661 {
+namespace cwg661 {
-void f(int a, int b) { // dr661: 2.7
+void f(int a, int b) { // cwg661: 2.7
a == b;
a != b;
a < b;
@@ -17,9 +17,9 @@ void f(int a, int b) { // dr661: 2.7
a >= b;
}
-} // namespace dr661
+} // namespace cwg661
-// CHECK-LABEL: define {{.*}} void @dr661::f(int, int)
+// CHECK-LABEL: define {{.*}} void @cwg661::f(int, int)
// CHECK: icmp eq
// CHECK: icmp ne
// CHECK: icmp slt
diff --git a/clang/test/CXX/drs/dr672.cpp b/clang/test/CXX/drs/cwg672.cpp
similarity index 91%
rename from clang/test/CXX/drs/dr672.cpp
rename to clang/test/CXX/drs/cwg672.cpp
index d5f0530ecbc9dd..07a64eaaf82698 100644
--- a/clang/test/CXX/drs/dr672.cpp
+++ b/clang/test/CXX/drs/cwg672.cpp
@@ -12,7 +12,7 @@
#define NOTHROW noexcept(true)
#endif
-namespace dr672 { // dr672: 2.7
+namespace cwg672 { // cwg672: 2.7
struct A {
A() NOTHROW;
@@ -22,11 +22,11 @@ void f() {
A *a = new A;
}
-} // namespace dr672
+} // namespace cwg672
-// CHECK-LABEL: define {{.*}} void @dr672::f()()
+// CHECK-LABEL: define {{.*}} void @cwg672::f()()
// CHECK: [[A:%.+]] = alloca ptr
// CHECK: [[CALL:%.+]] = call {{.*}} ptr @operator new(unsigned long)
-// CHECK: call void @dr672::A::A()
+// CHECK: call void @cwg672::A::A()
// CHECK: store ptr [[CALL]], ptr [[A]]
// CHECK-LABEL: }
diff --git a/clang/test/CXX/drs/dr593.cpp b/clang/test/CXX/drs/cwgr593.cpp
similarity index 93%
rename from clang/test/CXX/drs/dr593.cpp
rename to clang/test/CXX/drs/cwgr593.cpp
index 4998af966ebb90..d747f4e4a16179 100644
--- a/clang/test/CXX/drs/dr593.cpp
+++ b/clang/test/CXX/drs/cwgr593.cpp
@@ -12,7 +12,7 @@
#define NOTHROW noexcept(true)
#endif
-namespace dr593 { // dr593: 2.8
+namespace cwg593 { // cwg593: 2.8
void f();
void fence() NOTHROW;
@@ -29,7 +29,7 @@ void g() {
A();
}
-} // namespace dr593
+} // namespace cwg593
-// CHECK: call void @dr593::fence()()
+// CHECK: call void @cwg593::fence()()
// CHECK-NEXT: invoke void @__cxa_rethrow()
diff --git a/clang/test/CXX/drs/dr0xx.cpp b/clang/test/CXX/drs/dr0xx.cpp
index 5959f0a0c8dd65..a304862885c640 100644
--- a/clang/test/CXX/drs/dr0xx.cpp
+++ b/clang/test/CXX/drs/dr0xx.cpp
@@ -5,44 +5,44 @@
// RUN: %clang_cc1 -std=c++20 %s -verify=expected,since-cxx11,since-cxx17 -fexceptions -fcxx-exceptions -pedantic-errors -triple %itanium_abi_triple
// RUN: %clang_cc1 -std=c++23 %s -verify=expected,since-cxx11,since-cxx17 -fexceptions -fcxx-exceptions -pedantic-errors -triple %itanium_abi_triple
-namespace dr1 { // dr1: no
- namespace X { extern "C" void dr1_f(int a = 1); }
- namespace Y { extern "C" void dr1_f(int a = 1); }
- using X::dr1_f; using Y::dr1_f;
+namespace cwg1 { // cwg1: no
+ namespace X { extern "C" void cwg1_f(int a = 1); }
+ namespace Y { extern "C" void cwg1_f(int a = 1); }
+ using X::cwg1_f; using Y::cwg1_f;
void g() {
- dr1_f(0);
+ cwg1_f(0);
// FIXME: This should be rejected, due to the ambiguous default argument.
- dr1_f();
+ cwg1_f();
}
namespace X {
- using Y::dr1_f;
+ using Y::cwg1_f;
void h() {
- dr1_f(0);
+ cwg1_f(0);
// FIXME: This should be rejected, due to the ambiguous default argument.
- dr1_f();
+ cwg1_f();
}
}
namespace X {
void z(int);
}
- void X::z(int = 1) {} // #dr1-z
+ void X::z(int = 1) {} // #cwg1-z
namespace X {
void z(int = 1);
// expected-error at -1 {{redefinition of default argument}}
- // expected-note@#dr1-z {{previous definition is here}}
+ // expected-note@#cwg1-z {{previous definition is here}}
}
void i(int = 1);
void j() {
void i(int = 1);
- using dr1::i;
+ using cwg1::i;
i(0);
// FIXME: This should be rejected, due to the ambiguous default argument.
i();
}
void k() {
- using dr1::i;
+ using cwg1::i;
void i(int = 1);
i(0);
// FIXME: This should be rejected, due to the ambiguous default argument.
@@ -50,27 +50,27 @@ namespace dr1 { // dr1: no
}
}
-namespace dr3 { // dr3: yes
+namespace cwg3 { // cwg3: yes
template<typename T> struct A {};
- template<typename T> void f(T) { A<T> a; } // #dr3-f-T
+ template<typename T> void f(T) { A<T> a; } // #cwg3-f-T
template void f(int);
template<> struct A<int> {};
- // expected-error at -1 {{explicit specialization of 'dr3::A<int>' after instantiation}}
- // expected-note@#dr3-f-T {{implicit instantiation first required here}}
+ // expected-error at -1 {{explicit specialization of 'cwg3::A<int>' after instantiation}}
+ // expected-note@#cwg3-f-T {{implicit instantiation first required here}}
}
-namespace dr4 { // dr4: 2.8
+namespace cwg4 { // cwg4: 2.8
extern "C" {
- static void dr4_f(int) {}
- static void dr4_f(float) {}
- void dr4_g(int) {} // #dr4-g-int
- void dr4_g(float) {}
- // expected-error at -1 {{conflicting types for 'dr4_g'}}
- // expected-note@#dr4-g-int {{previous definition is here}}
+ static void cwg4_f(int) {}
+ static void cwg4_f(float) {}
+ void cwg4_g(int) {} // #cwg4-g-int
+ void cwg4_g(float) {}
+ // expected-error at -1 {{conflicting types for 'cwg4_g'}}
+ // expected-note@#cwg4-g-int {{previous definition is here}}
}
}
-namespace dr5 { // dr5: 3.1
+namespace cwg5 { // cwg5: 3.1
struct A {} a;
struct B {
B(const A&);
@@ -84,24 +84,24 @@ namespace dr5 { // dr5: 3.1
const C c = e;
}
-namespace dr7 { // dr7: 3.4
+namespace cwg7 { // cwg7: 3.4
class A { public: ~A(); };
- class B : virtual private A {}; // #dr7-B
- class C : public B {} c; // #dr7-C
- // expected-error@#dr7-C {{inherited virtual base class 'A' has private destructor}}
- // expected-note@#dr7-C {{in implicit default constructor for 'dr7::C' first required here}}
- // expected-note@#dr7-B {{declared private here}}
- // expected-error@#dr7-C {{inherited virtual base class 'A' has private destructor}}
- // expected-note@#dr7-C {{in implicit destructor for 'dr7::C' first required here}}
- // expected-note@#dr7-B {{declared private here}}
+ class B : virtual private A {}; // #cwg7-B
+ class C : public B {} c; // #cwg7-C
+ // expected-error@#cwg7-C {{inherited virtual base class 'A' has private destructor}}
+ // expected-note@#cwg7-C {{in implicit default constructor for 'cwg7::C' first required here}}
+ // expected-note@#cwg7-B {{declared private here}}
+ // expected-error@#cwg7-C {{inherited virtual base class 'A' has private destructor}}
+ // expected-note@#cwg7-C {{in implicit destructor for 'cwg7::C' first required here}}
+ // expected-note@#cwg7-B {{declared private here}}
class VeryDerivedC : public B, virtual public A {} vdc;
- class X { ~X(); }; // #dr7-X
+ class X { ~X(); }; // #cwg7-X
class Y : X { ~Y() {} };
// expected-error at -1 {{base class 'X' has private destructor}}
- // expected-note@#dr7-X {{implicitly declared private here}}
+ // expected-note@#cwg7-X {{implicitly declared private here}}
- namespace PR16370 { // This regressed the first time DR7 was fixed.
+ namespace PR16370 { // This regressed the first time CWG7 was fixed.
struct S1 { virtual ~S1(); };
struct S2 : S1 {};
struct S3 : S2 {};
@@ -114,7 +114,7 @@ namespace dr7 { // dr7: 3.4
}
}
-namespace dr8 { // dr8: dup 45
+namespace cwg8 { // cwg8: dup 45
class A {
struct U;
static const int k = 5;
@@ -126,23 +126,23 @@ namespace dr8 { // dr8: dup 45
A::T<A::U, A::k, &A::f> *A::g() { return 0; }
}
-namespace dr9 { // dr9: 2.8
+namespace cwg9 { // cwg9: 2.8
struct B {
protected:
- int m; // #dr9-m
+ int m; // #cwg9-m
friend int R1();
};
- struct N : protected B { // #dr9-N
+ struct N : protected B { // #cwg9-N
friend int R2();
} n;
int R1() { return n.m; }
- // expected-error at -1 {{'m' is a protected member of 'dr9::B'}}
- // expected-note@#dr9-N {{constrained by protected inheritance here}}
- // expected-note@#dr9-m {{member is declared here}}
+ // expected-error at -1 {{'m' is a protected member of 'cwg9::B'}}
+ // expected-note@#cwg9-N {{constrained by protected inheritance here}}
+ // expected-note@#cwg9-m {{member is declared here}}
int R2() { return n.m; }
}
-namespace dr10 { // dr10: dup 45
+namespace cwg10 { // cwg10: dup 45
class A {
struct B {
A::B *p;
@@ -150,7 +150,7 @@ namespace dr10 { // dr10: dup 45
};
}
-namespace dr11 { // dr11: yes
+namespace cwg11 { // cwg11: yes
template<typename T> struct A : T {
using typename T::U;
U u;
@@ -164,19 +164,19 @@ namespace dr11 { // dr11: yes
A<X> ax;
}
-namespace dr12 { // dr12: sup 239
+namespace cwg12 { // cwg12: sup 239
enum E { e };
E &f(E, E = e);
void g() {
int &f(int, E = e);
- // Under DR12, these call two
diff erent functions.
- // Under DR239, they call the same function.
+ // Under CWG12, these call two
diff erent functions.
+ // Under CWG239, they call the same function.
int &b = f(e);
int &c = f(1);
}
}
-namespace dr13 { // dr13: no
+namespace cwg13 { // cwg13: no
extern "C" void f(int);
void g(char);
@@ -191,60 +191,60 @@ namespace dr13 { // dr13: no
int a4 = h(g);
}
-namespace dr14 { // dr14: 3.4
- namespace X { extern "C" int dr14_f(); }
- namespace Y { extern "C" int dr14_f(); }
+namespace cwg14 { // cwg14: 3.4
+ namespace X { extern "C" int cwg14_f(); }
+ namespace Y { extern "C" int cwg14_f(); }
using namespace X;
using namespace Y;
- int k = dr14_f();
+ int k = cwg14_f();
class C {
int k;
- friend int Y::dr14_f();
+ friend int Y::cwg14_f();
} c;
namespace Z {
- extern "C" int dr14_f() { return c.k; }
+ extern "C" int cwg14_f() { return c.k; }
}
- namespace X { typedef int T; typedef int U; } // #dr14-X-U
- namespace Y { typedef int T; typedef long U; } // #dr14-Y-U
+ namespace X { typedef int T; typedef int U; } // #cwg14-X-U
+ namespace Y { typedef int T; typedef long U; } // #cwg14-Y-U
T t; // ok, same type both times
U u;
// expected-error at -1 {{reference to 'U' is ambiguous}}
- // expected-note@#dr14-X-U {{candidate found by name lookup is 'dr14::X::U'}}
- // expected-note@#dr14-Y-U {{candidate found by name lookup is 'dr14::Y::U'}}
+ // expected-note@#cwg14-X-U {{candidate found by name lookup is 'cwg14::X::U'}}
+ // expected-note@#cwg14-Y-U {{candidate found by name lookup is 'cwg14::Y::U'}}
}
-namespace dr15 { // dr15: yes
- template<typename T> void f(int); // #dr15-f-decl-first
+namespace cwg15 { // cwg15: yes
+ template<typename T> void f(int); // #cwg15-f-decl-first
template<typename T> void f(int = 0);
// expected-error at -1 {{default arguments cannot be added to a function template that has already been declared}}
- // expected-note@#dr15-f-decl-first {{previous template declaration is here}}
+ // expected-note@#cwg15-f-decl-first {{previous template declaration is here}}
}
-namespace dr16 { // dr16: 2.8
- class A { // #dr16-A
- void f(); // #dr16-A-f-decl
+namespace cwg16 { // cwg16: 2.8
+ class A { // #cwg16-A
+ void f(); // #cwg16-A-f-decl
friend class C;
};
- class B : A {}; // #dr16-B
+ class B : A {}; // #cwg16-B
class C : B {
void g() {
f();
- // expected-error at -1 {{'f' is a private member of 'dr16::A'}}
- // expected-note@#dr16-B {{constrained by implicitly private inheritance here}}
- // expected-note@#dr16-A-f-decl {{member is declared here}}
- A::f(); // #dr16-A-f-call
- // expected-error@#dr16-A-f-call {{'A' is a private member of 'dr16::A'}}
- // expected-note@#dr16-B {{constrained by implicitly private inheritance here}}
- // expected-note@#dr16-A {{member is declared here}}
- // expected-error@#dr16-A-f-call {{cannot cast 'dr16::C' to its private base class 'dr16::A'}}
- // expected-note@#dr16-B {{implicitly declared private here}}
+ // expected-error at -1 {{'f' is a private member of 'cwg16::A'}}
+ // expected-note@#cwg16-B {{constrained by implicitly private inheritance here}}
+ // expected-note@#cwg16-A-f-decl {{member is declared here}}
+ A::f(); // #cwg16-A-f-call
+ // expected-error@#cwg16-A-f-call {{'A' is a private member of 'cwg16::A'}}
+ // expected-note@#cwg16-B {{constrained by implicitly private inheritance here}}
+ // expected-note@#cwg16-A {{member is declared here}}
+ // expected-error@#cwg16-A-f-call {{cannot cast 'cwg16::C' to its private base class 'cwg16::A'}}
+ // expected-note@#cwg16-B {{implicitly declared private here}}
}
};
}
-namespace dr17 { // dr17: yes
+namespace cwg17 { // cwg17: yes
class A {
int n;
int f();
@@ -257,38 +257,38 @@ namespace dr17 { // dr17: yes
};
}
-// dr18: sup 577
+// cwg18: sup 577
-namespace dr19 { // dr19: 3.1
+namespace cwg19 { // cwg19: 3.1
struct A {
- int n; // #dr19-n
+ int n; // #cwg19-n
};
- struct B : protected A { // #dr19-B
+ struct B : protected A { // #cwg19-B
};
struct C : B {} c;
struct D : B {
int get1() { return c.n; }
- // expected-error at -1 {{'n' is a protected member of 'dr19::A'}}
- // expected-note@#dr19-B {{constrained by protected inheritance here}}
- // expected-note@#dr19-n {{member is declared here}}
+ // expected-error at -1 {{'n' is a protected member of 'cwg19::A'}}
+ // expected-note@#cwg19-B {{constrained by protected inheritance here}}
+ // expected-note@#cwg19-n {{member is declared here}}
int get2() { return ((A&)c).n; } // ok, A is an accessible base of B from here
};
}
-namespace dr20 { // dr20: 2.8
+namespace cwg20 { // cwg20: 2.8
class X {
public:
X();
private:
- X(const X&); // #dr20-X-ctor
+ X(const X&); // #cwg20-X-ctor
};
X &f();
X x = f();
- // expected-error at -1 {{calling a private constructor of class 'dr20::X'}}
- // expected-note@#dr20-X-ctor {{declared private here}}
+ // expected-error at -1 {{calling a private constructor of class 'cwg20::X'}}
+ // expected-note@#cwg20-X-ctor {{declared private here}}
}
-namespace dr21 { // dr21: 3.4
+namespace cwg21 { // cwg21: 3.4
template<typename T> struct A;
struct X {
template<typename T = int> friend struct A;
@@ -298,25 +298,25 @@ namespace dr21 { // dr21: 3.4
};
}
-namespace dr22 { // dr22: sup 481
- template<typename dr22_T = dr22_T> struct X;
- // expected-error at -1 {{unknown type name 'dr22_T'}}
+namespace cwg22 { // cwg22: sup 481
+ template<typename cwg22_T = cwg22_T> struct X;
+ // expected-error at -1 {{unknown type name 'cwg22_T'}}
typedef int T;
template<typename T = T> struct Y;
}
-namespace dr23 { // dr23: yes
- template<typename T> void f(T, T); // #dr23-f-T-T
- template<typename T> void f(T, int); // #dr23-f-T-int
+namespace cwg23 { // cwg23: yes
+ template<typename T> void f(T, T); // #cwg23-f-T-T
+ template<typename T> void f(T, int); // #cwg23-f-T-int
void g() { f(0, 0); }
// expected-error at -1 {{call to 'f' is ambiguous}}
- // expected-note@#dr23-f-T-T {{candidate function [with T = int]}}
- // expected-note@#dr23-f-T-int {{candidate function [with T = int]}}
+ // expected-note@#cwg23-f-T-T {{candidate function [with T = int]}}
+ // expected-note@#cwg23-f-T-int {{candidate function [with T = int]}}
}
-// dr24: na
+// cwg24: na
-namespace dr25 { // dr25: yes
+namespace cwg25 { // cwg25: yes
struct A {
void f() throw(int);
// since-cxx17-error at -1 {{ISO C++17 does not allow dynamic exception specifications}}
@@ -351,7 +351,7 @@ namespace dr25 { // dr25: yes
}
}
-namespace dr26 { // dr26: yes
+namespace cwg26 { // cwg26: yes
struct A { A(A, const A & = A()); };
// expected-error at -1 {{copy constructor must pass its first argument by reference}}
struct B {
@@ -371,77 +371,77 @@ namespace dr26 { // dr26: yes
};
}
-namespace dr27 { // dr27: yes
+namespace cwg27 { // cwg27: yes
enum E { e } n;
E &m = true ? n : n;
}
-// dr28: na lib
+// cwg28: na lib
-namespace dr29 { // dr29: 3.4
- void dr29_f0(); // #dr29-f0
- void g0() { void dr29_f0(); }
- extern "C++" void g0_cxx() { void dr29_f0(); }
- extern "C" void g0_c() { void dr29_f0(); }
- // expected-error at -1 {{declaration of 'dr29_f0' has a
diff erent language linkage}}
- // expected-note@#dr29-f0 {{previous declaration is here}}
+namespace cwg29 { // cwg29: 3.4
+ void cwg29_f0(); // #cwg29-f0
+ void g0() { void cwg29_f0(); }
+ extern "C++" void g0_cxx() { void cwg29_f0(); }
+ extern "C" void g0_c() { void cwg29_f0(); }
+ // expected-error at -1 {{declaration of 'cwg29_f0' has a
diff erent language linkage}}
+ // expected-note@#cwg29-f0 {{previous declaration is here}}
- extern "C" void dr29_f1(); // #dr29-f1
- void g1() { void dr29_f1(); }
- extern "C" void g1_c() { void dr29_f1(); }
- extern "C++" void g1_cxx() { void dr29_f1(); }
- // expected-error at -1 {{declaration of 'dr29_f1' has a
diff erent language linkage}}
- // expected-note@#dr29-f1 {{previous declaration is here}}
+ extern "C" void cwg29_f1(); // #cwg29-f1
+ void g1() { void cwg29_f1(); }
+ extern "C" void g1_c() { void cwg29_f1(); }
+ extern "C++" void g1_cxx() { void cwg29_f1(); }
+ // expected-error at -1 {{declaration of 'cwg29_f1' has a
diff erent language linkage}}
+ // expected-note@#cwg29-f1 {{previous declaration is here}}
- void g2() { void dr29_f2(); } // #dr29-f2
- extern "C" void dr29_f2();
- // expected-error at -1 {{declaration of 'dr29_f2' has a
diff erent language linkage}}
- // expected-note@#dr29-f2 {{previous declaration is here}}
+ void g2() { void cwg29_f2(); } // #cwg29-f2
+ extern "C" void cwg29_f2();
+ // expected-error at -1 {{declaration of 'cwg29_f2' has a
diff erent language linkage}}
+ // expected-note@#cwg29-f2 {{previous declaration is here}}
- extern "C" void g3() { void dr29_f3(); } // #dr29-f3
- extern "C++" void dr29_f3();
- // expected-error at -1 {{declaration of 'dr29_f3' has a
diff erent language linkage}}
- // expected-note@#dr29-f3 {{previous declaration is here}}
+ extern "C" void g3() { void cwg29_f3(); } // #cwg29-f3
+ extern "C++" void cwg29_f3();
+ // expected-error at -1 {{declaration of 'cwg29_f3' has a
diff erent language linkage}}
+ // expected-note@#cwg29-f3 {{previous declaration is here}}
- extern "C++" void g4() { void dr29_f4(); } // #dr29-f4
- extern "C" void dr29_f4();
- // expected-error at -1 {{declaration of 'dr29_f4' has a
diff erent language linkage}}
- // expected-note@#dr29-f4 {{previous declaration is here}}
+ extern "C++" void g4() { void cwg29_f4(); } // #cwg29-f4
+ extern "C" void cwg29_f4();
+ // expected-error at -1 {{declaration of 'cwg29_f4' has a
diff erent language linkage}}
+ // expected-note@#cwg29-f4 {{previous declaration is here}}
extern "C" void g5();
- extern "C++" void dr29_f5();
+ extern "C++" void cwg29_f5();
void g5() {
- void dr29_f5(); // ok, g5 is extern "C" but we're not inside the linkage-specification here.
+ void cwg29_f5(); // ok, g5 is extern "C" but we're not inside the linkage-specification here.
}
extern "C++" void g6();
- extern "C" void dr29_f6();
+ extern "C" void cwg29_f6();
void g6() {
- void dr29_f6(); // ok, g6 is extern "C" but we're not inside the linkage-specification here.
+ void cwg29_f6(); // ok, g6 is extern "C" but we're not inside the linkage-specification here.
}
extern "C" void g7();
- extern "C++" void dr29_f7(); // #dr29-f7
+ extern "C++" void cwg29_f7(); // #cwg29-f7
extern "C" void g7() {
- void dr29_f7();
- // expected-error at -1 {{declaration of 'dr29_f7' has a
diff erent language linkage}}
- // expected-note@#dr29-f7 {{previous declaration is here}}
+ void cwg29_f7();
+ // expected-error at -1 {{declaration of 'cwg29_f7' has a
diff erent language linkage}}
+ // expected-note@#cwg29-f7 {{previous declaration is here}}
}
extern "C++" void g8();
- extern "C" void dr29_f8(); // #dr29-f8
+ extern "C" void cwg29_f8(); // #cwg29-f8
extern "C++" void g8() {
- void dr29_f8();
- // expected-error at -1 {{declaration of 'dr29_f8' has a
diff erent language linkage}}
- // expected-note@#dr29-f8 {{previous declaration is here}}
+ void cwg29_f8();
+ // expected-error at -1 {{declaration of 'cwg29_f8' has a
diff erent language linkage}}
+ // expected-note@#cwg29-f8 {{previous declaration is here}}
}
}
-namespace dr30 { // dr30: sup 468 c++11
+namespace cwg30 { // cwg30: sup 468 c++11
struct A {
template<int> static int f();
} a, *p = &a;
- // FIXME: It's not clear whether DR468 applies to C++98 too.
+ // FIXME: It's not clear whether CWG468 applies to C++98 too.
int x = A::template f<0>();
// cxx98-error at -1 {{'template' keyword outside of a template}}
int y = a.template f<0>();
@@ -450,29 +450,29 @@ namespace dr30 { // dr30: sup 468 c++11
// cxx98-error at -1 {{'template' keyword outside of a template}}
}
-namespace dr31 { // dr31: 2.8
+namespace cwg31 { // cwg31: 2.8
class X {
private:
- void operator delete(void*); // #dr31-delete
+ void operator delete(void*); // #cwg31-delete
};
// We would call X::operator delete if X() threw (even though it can't,
// and even though we allocated the X using ::operator delete).
X *p = new X;
- // expected-error at -1 {{'operator delete' is a private member of 'dr31::X'}}
- // expected-note@#dr31-delete {{declared private here}}
+ // expected-error at -1 {{'operator delete' is a private member of 'cwg31::X'}}
+ // expected-note@#cwg31-delete {{declared private here}}
}
-// dr32: na
+// cwg32: na
-namespace dr33 { // dr33: 9
- namespace X { struct S; void f(void (*)(S)); } // #dr33-f-S
- namespace Y { struct T; void f(void (*)(T)); } // #dr33-f-T
+namespace cwg33 { // cwg33: 9
+ namespace X { struct S; void f(void (*)(S)); } // #cwg33-f-S
+ namespace Y { struct T; void f(void (*)(T)); } // #cwg33-f-T
void g(X::S);
template<typename Z> Z g(Y::T);
void h() { f(&g); }
// expected-error at -1 {{call to 'f' is ambiguous}}
- // expected-note@#dr33-f-S {{candidate function}}
- // expected-note@#dr33-f-T {{candidate function}}
+ // expected-note@#cwg33-f-S {{candidate function}}
+ // expected-note@#cwg33-f-T {{candidate function}}
template<typename T> void t(X::S);
template<typename T, typename U = void> void u(X::S);
@@ -507,10 +507,10 @@ namespace dr33 { // dr33: 9
}
}
-// dr34: na
-// dr35: dup 178
+// cwg34: na
+// cwg35: dup 178
-namespace dr36 { // dr36: 2.8
+namespace cwg36 { // cwg36: 2.8
namespace example1 {
namespace A {
int i;
@@ -540,25 +540,25 @@ namespace example2 {
struct D : virtual B, virtual C
{
- using B::i; // #dr36-ex2-B-i-first
+ using B::i; // #cwg36-ex2-B-i-first
using B::i;
// expected-error at -1 {{redeclaration of using declaration}}
- // expected-note@#dr36-ex2-B-i-first {{previous using declaration}}
+ // expected-note@#cwg36-ex2-B-i-first {{previous using declaration}}
- using C::i; // #dr36-ex2-C-i-first
+ using C::i; // #cwg36-ex2-C-i-first
using C::i;
// expected-error at -1 {{redeclaration of using declaration}}
- // expected-note@#dr36-ex2-C-i-first {{previous using declaration}}
+ // expected-note@#cwg36-ex2-C-i-first {{previous using declaration}}
- using B::j; // #dr36-ex2-B-j-first
+ using B::j; // #cwg36-ex2-B-j-first
using B::j;
// expected-error at -1 {{redeclaration of using declaration}}
- // expected-note@#dr36-ex2-B-j-first {{previous using declaration}}
+ // expected-note@#cwg36-ex2-B-j-first {{previous using declaration}}
- using C::j; // #dr36-ex2-C-j-first
+ using C::j; // #cwg36-ex2-C-j-first
using C::j;
// expected-error at -1 {{redeclaration of using declaration}}
- // expected-note@#dr36-ex2-C-j-first {{previous using declaration}}
+ // expected-note@#cwg36-ex2-C-j-first {{previous using declaration}}
};
}
@@ -578,25 +578,25 @@ namespace example3 {
template<typename T>
struct D : virtual B<T>, virtual C<T>
{
- using B<T>::i; // #dr36-ex3-B-i-first
+ using B<T>::i; // #cwg36-ex3-B-i-first
using B<T>::i;
// expected-error at -1 {{redeclaration of using declaration}}
- // expected-note@#dr36-ex3-B-i-first {{previous using declaration}}
+ // expected-note@#cwg36-ex3-B-i-first {{previous using declaration}}
- using C<T>::i; // #dr36-ex3-C-i-first
+ using C<T>::i; // #cwg36-ex3-C-i-first
using C<T>::i;
// expected-error at -1 {{redeclaration of using declaration}}
- // expected-note@#dr36-ex3-C-i-first {{previous using declaration}}
+ // expected-note@#cwg36-ex3-C-i-first {{previous using declaration}}
- using B<T>::j; // #dr36-ex3-B-j-first
+ using B<T>::j; // #cwg36-ex3-B-j-first
using B<T>::j;
// expected-error at -1 {{redeclaration of using declaration}}
- // expected-note@#dr36-ex3-B-j-first {{previous using declaration}}
+ // expected-note@#cwg36-ex3-B-j-first {{previous using declaration}}
- using C<T>::j; // #dr36-ex3-C-j-first
+ using C<T>::j; // #cwg36-ex3-C-j-first
using C<T>::j;
// expected-error at -1 {{redeclaration of using declaration}}
- // expected-note@#dr36-ex3-C-j-first {{previous using declaration}}
+ // expected-note@#cwg36-ex3-C-j-first {{previous using declaration}}
};
}
namespace example4 {
@@ -607,23 +607,23 @@ namespace example4 {
template<typename T>
struct G : E<T> {
- using E<T>::k; // #dr36-E-k-first
+ using E<T>::k; // #cwg36-E-k-first
using E<T>::k;
// expected-error at -1 {{redeclaration of using declaration}}
- // expected-note@#dr36-E-k-first {{previous using declaration}}
+ // expected-note@#cwg36-E-k-first {{previous using declaration}}
};
}
}
-// dr37: sup 475
+// cwg37: sup 475
-namespace dr38 { // dr38: yes
+namespace cwg38 { // cwg38: yes
template<typename T> struct X {};
template<typename T> X<T> operator+(X<T> a, X<T> b) { return a; }
template X<int> operator+<int>(X<int>, X<int>);
}
-namespace dr39 { // dr39: no
+namespace cwg39 { // cwg39: no
namespace example1 {
struct A { int &f(int); };
struct B : A {
@@ -635,16 +635,16 @@ namespace dr39 { // dr39: no
namespace example2 {
struct A {
- int &x(int); // #dr39-A-x-decl
- static int &y(int); // #dr39-A-y-decl
+ int &x(int); // #cwg39-A-x-decl
+ static int &y(int); // #cwg39-A-y-decl
};
struct V {
int &z(int);
};
struct B : A, virtual V {
- using A::x; // #dr39-using-A-x
+ using A::x; // #cwg39-using-A-x
float &x(float);
- using A::y; // #dr39-using-A-y
+ using A::y; // #cwg39-using-A-y
static float &y(float);
using V::z;
float &z(float);
@@ -652,18 +652,18 @@ namespace dr39 { // dr39: no
struct C : A, B, virtual V {} c;
/* expected-warning at -1
{{direct base 'A' is inaccessible due to ambiguity:
- struct dr39::example2::C -> A
- struct dr39::example2::C -> B -> A}} */
+ struct cwg39::example2::C -> A
+ struct cwg39::example2::C -> B -> A}} */
int &x = c.x(0);
// expected-error at -1 {{member 'x' found in multiple base classes of
diff erent types}}
- // expected-note@#dr39-A-x-decl {{member found by ambiguous name lookup}}
- // expected-note@#dr39-using-A-x {{member found by ambiguous name lookup}}
+ // expected-note@#cwg39-A-x-decl {{member found by ambiguous name lookup}}
+ // expected-note@#cwg39-using-A-x {{member found by ambiguous name lookup}}
// FIXME: This is valid, because we find the same static data member either way.
int &y = c.y(0);
// expected-error at -1 {{member 'y' found in multiple base classes of
diff erent types}}
- // expected-note@#dr39-A-y-decl {{member found by ambiguous name lookup}}
- // expected-note@#dr39-using-A-y {{member found by ambiguous name lookup}}
+ // expected-note@#cwg39-A-y-decl {{member found by ambiguous name lookup}}
+ // expected-note@#cwg39-using-A-y {{member found by ambiguous name lookup}}
int &z = c.z(0);
}
@@ -676,63 +676,63 @@ namespace dr39 { // dr39: no
}
namespace example4 {
- struct A { int n; }; // #dr39-ex4-A-n
+ struct A { int n; }; // #cwg39-ex4-A-n
struct B : A {};
struct C : A {};
struct D : B, C { int f() { return n; } };
/* expected-error at -1
{{non-static member 'n' found in multiple base-class subobjects of type 'A':
- struct dr39::example4::D -> B -> A
- struct dr39::example4::D -> C -> A}} */
- // expected-note@#dr39-ex4-A-n {{member found by ambiguous name lookup}}
+ struct cwg39::example4::D -> B -> A
+ struct cwg39::example4::D -> C -> A}} */
+ // expected-note@#cwg39-ex4-A-n {{member found by ambiguous name lookup}}
}
namespace PR5916 {
// FIXME: This is valid.
- struct A { int n; }; // #dr39-A-n
+ struct A { int n; }; // #cwg39-A-n
struct B : A {};
struct C : A {};
struct D : B, C {};
- int k = sizeof(D::n); // #dr39-sizeof
- /* expected-error@#dr39-sizeof
+ int k = sizeof(D::n); // #cwg39-sizeof
+ /* expected-error@#cwg39-sizeof
{{non-static member 'n' found in multiple base-class subobjects of type 'A':
- struct dr39::PR5916::D -> B -> A
- struct dr39::PR5916::D -> C -> A}} */
- // expected-note@#dr39-A-n {{member found by ambiguous name lookup}}
+ struct cwg39::PR5916::D -> B -> A
+ struct cwg39::PR5916::D -> C -> A}} */
+ // expected-note@#cwg39-A-n {{member found by ambiguous name lookup}}
- // expected-error@#dr39-sizeof {{unknown type name}}
+ // expected-error@#cwg39-sizeof {{unknown type name}}
#if __cplusplus >= 201103L
decltype(D::n) n;
/* expected-error at -1
{{non-static member 'n' found in multiple base-class subobjects of type 'A':
- struct dr39::PR5916::D -> B -> A
- struct dr39::PR5916::D -> C -> A}} */
- // expected-note@#dr39-A-n {{member found by ambiguous name lookup}}
+ struct cwg39::PR5916::D -> B -> A
+ struct cwg39::PR5916::D -> C -> A}} */
+ // expected-note@#cwg39-A-n {{member found by ambiguous name lookup}}
#endif
}
}
-// dr40: na
+// cwg40: na
-namespace dr41 { // dr41: yes
+namespace cwg41 { // cwg41: yes
struct S f(S);
}
-namespace dr42 { // dr42: yes
+namespace cwg42 { // cwg42: yes
struct A { static const int k = 0; };
struct B : A { static const int k = A::k; };
}
-// dr43: na
+// cwg43: na
-namespace dr44 { // dr44: sup 727
+namespace cwg44 { // cwg44: sup 727
struct A {
template<int> void f();
template<> void f<0>();
};
}
-namespace dr45 { // dr45: yes
+namespace cwg45 { // cwg45: yes
class A {
class B {};
class C : B {};
@@ -740,27 +740,27 @@ namespace dr45 { // dr45: yes
};
}
-namespace dr46 { // dr46: yes
+namespace cwg46 { // cwg46: yes
template<typename> struct A { template<typename> struct B {}; };
template template struct A<int>::B<int>;
// expected-error at -1 {{expected unqualified-id}}
}
-namespace dr47 { // dr47: sup 329
+namespace cwg47 { // cwg47: sup 329
template<typename T> struct A {
- friend void f() { T t; } // #dr47-f
+ friend void f() { T t; } // #cwg47-f
// expected-error at -1 {{redefinition of 'f'}}
- // expected-note@#dr47-b {{in instantiation of template class 'dr47::A<float>' requested here}}
- // expected-note@#dr47-f {{previous definition is here}}
+ // expected-note@#cwg47-b {{in instantiation of template class 'cwg47::A<float>' requested here}}
+ // expected-note@#cwg47-f {{previous definition is here}}
};
A<int> a;
- A<float> b; // #dr47-b
+ A<float> b; // #cwg47-b
void f();
void g() { f(); }
}
-namespace dr48 { // dr48: yes
+namespace cwg48 { // cwg48: yes
namespace {
struct S {
static const int m = 0;
@@ -776,45 +776,45 @@ namespace dr48 { // dr48: yes
const int &c = S::o;
}
-namespace dr49 { // dr49: 2.8
- template<int*> struct A {}; // #dr49-A
+namespace cwg49 { // cwg49: 2.8
+ template<int*> struct A {}; // #cwg49-A
int k;
#if __has_feature(cxx_constexpr)
constexpr
#endif
- int *const p = &k; // #dr49-p
+ int *const p = &k; // #cwg49-p
A<&k> a;
- A<p> b; // #dr49-b
- // cxx98-error@#dr49-b {{non-type template argument referring to object 'p' with internal linkage is a C++11 extension}}
- // cxx98-note@#dr49-p {{non-type template argument refers to object here}}
- // cxx98-14-error@#dr49-b {{non-type template argument for template parameter of pointer type 'int *' must have its address taken}}
- // cxx98-14-note@#dr49-A {{template parameter is declared here}}
- int *q = &k; // #dr49-q
- A<q> c; // #dr49-c
- // cxx98-error@#dr49-c {{non-type template argument for template parameter of pointer type 'int *' must have its address taken}}
- // cxx98-note@#dr49-A {{template parameter is declared here}}
- // cxx11-14-error@#dr49-c {{non-type template argument of type 'int *' is not a constant expression}}
- // cxx11-14-note@#dr49-c {{read of non-constexpr variable 'q' is not allowed in a constant expression}}
- // cxx11-14-note@#dr49-q {{declared here}}
- // cxx11-14-note@#dr49-A {{template parameter is declared here}}
- // since-cxx17-error@#dr49-c {{non-type template argument is not a constant expression}}
- // since-cxx17-note@#dr49-c {{read of non-constexpr variable 'q' is not allowed in a constant expression}}
- // since-cxx17-note@#dr49-q {{declared here}}
-}
-
-namespace dr50 { // dr50: yes
- struct X; // #dr50-X
+ A<p> b; // #cwg49-b
+ // cxx98-error@#cwg49-b {{non-type template argument referring to object 'p' with internal linkage is a C++11 extension}}
+ // cxx98-note@#cwg49-p {{non-type template argument refers to object here}}
+ // cxx98-14-error@#cwg49-b {{non-type template argument for template parameter of pointer type 'int *' must have its address taken}}
+ // cxx98-14-note@#cwg49-A {{template parameter is declared here}}
+ int *q = &k; // #cwg49-q
+ A<q> c; // #cwg49-c
+ // cxx98-error@#cwg49-c {{non-type template argument for template parameter of pointer type 'int *' must have its address taken}}
+ // cxx98-note@#cwg49-A {{template parameter is declared here}}
+ // cxx11-14-error@#cwg49-c {{non-type template argument of type 'int *' is not a constant expression}}
+ // cxx11-14-note@#cwg49-c {{read of non-constexpr variable 'q' is not allowed in a constant expression}}
+ // cxx11-14-note@#cwg49-q {{declared here}}
+ // cxx11-14-note@#cwg49-A {{template parameter is declared here}}
+ // since-cxx17-error@#cwg49-c {{non-type template argument is not a constant expression}}
+ // since-cxx17-note@#cwg49-c {{read of non-constexpr variable 'q' is not allowed in a constant expression}}
+ // since-cxx17-note@#cwg49-q {{declared here}}
+}
+
+namespace cwg50 { // cwg50: yes
+ struct X; // #cwg50-X
extern X *p;
X *q = (X*)p;
X *r = static_cast<X*>(p);
X *s = const_cast<X*>(p);
X *t = reinterpret_cast<X*>(p);
X *u = dynamic_cast<X*>(p);
- // expected-error at -1 {{'dr50::X' is an incomplete type}}
- // expected-note@#dr50-X {{forward declaration of 'dr50::X'}}
+ // expected-error at -1 {{'cwg50::X' is an incomplete type}}
+ // expected-note@#cwg50-X {{forward declaration of 'cwg50::X'}}
}
-namespace dr51 { // dr51: 2.8
+namespace cwg51 { // cwg51: 2.8
struct A {};
struct B : A {};
struct S {
@@ -824,57 +824,57 @@ namespace dr51 { // dr51: 2.8
A &a = s;
}
-namespace dr52 { // dr52: 2.8
- struct A { int n; }; // #dr52-A
- struct B : private A {} b; // #dr52-B
- int k = b.A::n; // #dr52-k
+namespace cwg52 { // cwg52: 2.8
+ struct A { int n; }; // #cwg52-A
+ struct B : private A {} b; // #cwg52-B
+ int k = b.A::n; // #cwg52-k
// FIXME: This first diagnostic is very strangely worded, and seems to be bogus.
- // expected-error@#dr52-k {{'A' is a private member of 'dr52::A'}}
- // expected-note@#dr52-B {{constrained by private inheritance here}}
- // expected-note@#dr52-A {{member is declared here}}
- // expected-error@#dr52-k {{cannot cast 'struct B' to its private base class 'dr52::A'}}
- // expected-note@#dr52-B {{declared private here}}
+ // expected-error@#cwg52-k {{'A' is a private member of 'cwg52::A'}}
+ // expected-note@#cwg52-B {{constrained by private inheritance here}}
+ // expected-note@#cwg52-A {{member is declared here}}
+ // expected-error@#cwg52-k {{cannot cast 'struct B' to its private base class 'cwg52::A'}}
+ // expected-note@#cwg52-B {{declared private here}}
}
-namespace dr53 { // dr53: yes
+namespace cwg53 { // cwg53: yes
int n = 0;
enum E { e } x = static_cast<E>(n);
}
-namespace dr54 { // dr54: 2.8
+namespace cwg54 { // cwg54: 2.8
struct A { int a; } a;
struct V { int v; } v;
- struct B : private A, virtual V { int b; } b; // #dr54-B
+ struct B : private A, virtual V { int b; } b; // #cwg54-B
A &sab = static_cast<A&>(b);
// expected-error at -1 {{cannot cast 'struct B' to its private base class 'A'}}
- // expected-note@#dr54-B {{declared private here}}
+ // expected-note@#cwg54-B {{declared private here}}
A *spab = static_cast<A*>(&b);
// expected-error at -1 {{cannot cast 'struct B' to its private base class 'A'}}
- // expected-note@#dr54-B {{declared private here}}
+ // expected-note@#cwg54-B {{declared private here}}
int A::*smab = static_cast<int A::*>(&B::b);
- // expected-error at -1 {{cannot cast 'dr54::B' to its private base class 'dr54::A'}}
- // expected-note@#dr54-B {{declared private here}}
+ // expected-error at -1 {{cannot cast 'cwg54::B' to its private base class 'cwg54::A'}}
+ // expected-note@#cwg54-B {{declared private here}}
B &sba = static_cast<B&>(a);
- // expected-error at -1 {{cannot cast private base class 'dr54::A' to 'dr54::B'}}
- // expected-note@#dr54-B {{declared private here}}
+ // expected-error at -1 {{cannot cast private base class 'cwg54::A' to 'cwg54::B'}}
+ // expected-note@#cwg54-B {{declared private here}}
B *spba = static_cast<B*>(&a);
- // expected-error at -1 {{cannot cast private base class 'dr54::A' to 'dr54::B'}}
- // expected-note@#dr54-B {{declared private here}}
+ // expected-error at -1 {{cannot cast private base class 'cwg54::A' to 'cwg54::B'}}
+ // expected-note@#cwg54-B {{declared private here}}
int B::*smba = static_cast<int B::*>(&A::a);
- // expected-error at -1 {{cannot cast private base class 'dr54::A' to 'dr54::B'}}
- // expected-note@#dr54-B {{declared private here}}
+ // expected-error at -1 {{cannot cast private base class 'cwg54::A' to 'cwg54::B'}}
+ // expected-note@#cwg54-B {{declared private here}}
V &svb = static_cast<V&>(b);
V *spvb = static_cast<V*>(&b);
int V::*smvb = static_cast<int V::*>(&B::b);
- // expected-error at -1 {{conversion from pointer to member of class 'dr54::B' to pointer to member of class 'dr54::V' via virtual base 'dr54::V' is not allowed}}
+ // expected-error at -1 {{conversion from pointer to member of class 'cwg54::B' to pointer to member of class 'cwg54::V' via virtual base 'cwg54::V' is not allowed}}
B &sbv = static_cast<B&>(v);
- // expected-error at -1 {{cannot cast 'struct V' to 'B &' via virtual base 'dr54::V'}}
+ // expected-error at -1 {{cannot cast 'struct V' to 'B &' via virtual base 'cwg54::V'}}
B *spbv = static_cast<B*>(&v);
- // expected-error at -1 {{cannot cast 'dr54::V *' to 'B *' via virtual base 'dr54::V'}}
+ // expected-error at -1 {{cannot cast 'cwg54::V *' to 'B *' via virtual base 'cwg54::V'}}
int B::*smbv = static_cast<int B::*>(&V::v);
- // expected-error at -1 {{conversion from pointer to member of class 'dr54::V' to pointer to member of class 'dr54::B' via virtual base 'dr54::V' is not allowed}}
+ // expected-error at -1 {{conversion from pointer to member of class 'cwg54::V' to pointer to member of class 'cwg54::B' via virtual base 'cwg54::V' is not allowed}}
A &cab = (A&)(b);
A *cpab = (A*)(&b);
@@ -886,37 +886,37 @@ namespace dr54 { // dr54: 2.8
V &cvb = (V&)(b);
V *cpvb = (V*)(&b);
int V::*cmvb = (int V::*)(&B::b);
- // expected-error at -1 {{conversion from pointer to member of class 'dr54::B' to pointer to member of class 'dr54::V' via virtual base 'dr54::V' is not allowed}}
+ // expected-error at -1 {{conversion from pointer to member of class 'cwg54::B' to pointer to member of class 'cwg54::V' via virtual base 'cwg54::V' is not allowed}}
B &cbv = (B&)(v);
- // expected-error at -1 {{cannot cast 'struct V' to 'B &' via virtual base 'dr54::V'}}
+ // expected-error at -1 {{cannot cast 'struct V' to 'B &' via virtual base 'cwg54::V'}}
B *cpbv = (B*)(&v);
- // expected-error at -1 {{cannot cast 'dr54::V *' to 'B *' via virtual base 'dr54::V'}}
+ // expected-error at -1 {{cannot cast 'cwg54::V *' to 'B *' via virtual base 'cwg54::V'}}
int B::*cmbv = (int B::*)(&V::v);
- // expected-error at -1 {{conversion from pointer to member of class 'dr54::V' to pointer to member of class 'dr54::B' via virtual base 'dr54::V' is not allowed}}
+ // expected-error at -1 {{conversion from pointer to member of class 'cwg54::V' to pointer to member of class 'cwg54::B' via virtual base 'cwg54::V' is not allowed}}
}
-namespace dr55 { // dr55: yes
+namespace cwg55 { // cwg55: yes
enum E { e = 5 };
int test[(e + 1 == 6) ? 1 : -1];
}
-namespace dr56 { // dr56: yes
+namespace cwg56 { // cwg56: yes
struct A {
- typedef int T; // #dr56-typedef-int-T-first
+ typedef int T; // #cwg56-typedef-int-T-first
typedef int T;
// expected-error at -1 {{redefinition of 'T'}}
- // expected-note@#dr56-typedef-int-T-first {{previous definition is here}}
+ // expected-note@#cwg56-typedef-int-T-first {{previous definition is here}}
};
struct B {
struct X;
- typedef X X; // #dr56-typedef-X-X-first
+ typedef X X; // #cwg56-typedef-X-X-first
typedef X X;
// expected-error at -1 {{redefinition of 'X'}}
- // expected-note@#dr56-typedef-X-X-first {{previous definition is here}}
+ // expected-note@#cwg56-typedef-X-X-first {{previous definition is here}}
};
}
-namespace dr58 { // dr58: 3.1
+namespace cwg58 { // cwg58: 3.1
// FIXME: Ideally, we should have a CodeGen test for this.
#if __cplusplus >= 201103L
enum E1 { E1_0 = 0, E1_1 = 1 };
@@ -927,54 +927,54 @@ namespace dr58 { // dr58: 3.1
#endif
}
-namespace dr59 { // dr59: yes
+namespace cwg59 { // cwg59: yes
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-volatile"
template<typename T> struct convert_to { operator T() const; };
- struct A {}; // #dr59-A
- struct B : A {}; // #dr59-B
+ struct A {}; // #cwg59-A
+ struct B : A {}; // #cwg59-B
A a1 = convert_to<A>();
A a2 = convert_to<A&>();
A a3 = convert_to<const A>();
A a4 = convert_to<const volatile A>();
- // cxx98-14-error at -1 {{no viable constructor copying variable of type 'const volatile dr59::A'}}
- // cxx98-14-note@#dr59-A {{candidate constructor (the implicit copy constructor) not viable: 1st argument ('const volatile dr59::A') would lose volatile qualifier}}
- // cxx11-14-note@#dr59-A {{candidate constructor (the implicit move constructor) not viable: 1st argument ('const volatile dr59::A') would lose const and volatile qualifiers}}
- // cxx98-14-note@#dr59-A {{candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided}}
+ // cxx98-14-error at -1 {{no viable constructor copying variable of type 'const volatile cwg59::A'}}
+ // cxx98-14-note@#cwg59-A {{candidate constructor (the implicit copy constructor) not viable: 1st argument ('const volatile cwg59::A') would lose volatile qualifier}}
+ // cxx11-14-note@#cwg59-A {{candidate constructor (the implicit move constructor) not viable: 1st argument ('const volatile cwg59::A') would lose const and volatile qualifiers}}
+ // cxx98-14-note@#cwg59-A {{candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided}}
A a5 = convert_to<const volatile A&>();
- // expected-error at -1 {{no viable constructor copying variable of type 'const volatile dr59::A'}}
- // expected-note@#dr59-A {{candidate constructor (the implicit copy constructor) not viable: 1st argument ('const volatile dr59::A') would lose volatile qualifier}}
- // since-cxx11-note@#dr59-A {{candidate constructor (the implicit move constructor) not viable: 1st argument ('const volatile dr59::A') would lose const and volatile qualifiers}}
- // expected-note@#dr59-A {{candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided}}
+ // expected-error at -1 {{no viable constructor copying variable of type 'const volatile cwg59::A'}}
+ // expected-note@#cwg59-A {{candidate constructor (the implicit copy constructor) not viable: 1st argument ('const volatile cwg59::A') would lose volatile qualifier}}
+ // since-cxx11-note@#cwg59-A {{candidate constructor (the implicit move constructor) not viable: 1st argument ('const volatile cwg59::A') would lose const and volatile qualifiers}}
+ // expected-note@#cwg59-A {{candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided}}
B b1 = convert_to<B>();
B b2 = convert_to<B&>();
B b3 = convert_to<const B>();
B b4 = convert_to<const volatile B>();
- // cxx98-14-error at -1 {{no viable constructor copying variable of type 'const volatile dr59::B'}}
- // cxx98-14-note@#dr59-B {{candidate constructor (the implicit copy constructor) not viable: 1st argument ('const volatile dr59::B') would lose volatile qualifier}}
- // cxx11-14-note@#dr59-B {{candidate constructor (the implicit move constructor) not viable: 1st argument ('const volatile dr59::B') would lose const and volatile qualifiers}}
- // cxx98-14-note@#dr59-B {{candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided}}
+ // cxx98-14-error at -1 {{no viable constructor copying variable of type 'const volatile cwg59::B'}}
+ // cxx98-14-note@#cwg59-B {{candidate constructor (the implicit copy constructor) not viable: 1st argument ('const volatile cwg59::B') would lose volatile qualifier}}
+ // cxx11-14-note@#cwg59-B {{candidate constructor (the implicit move constructor) not viable: 1st argument ('const volatile cwg59::B') would lose const and volatile qualifiers}}
+ // cxx98-14-note@#cwg59-B {{candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided}}
B b5 = convert_to<const volatile B&>();
- // expected-error at -1 {{no viable constructor copying variable of type 'const volatile dr59::B'}}
- // expected-note@#dr59-B {{candidate constructor (the implicit copy constructor) not viable: 1st argument ('const volatile dr59::B') would lose volatile qualifier}}
- // since-cxx11-note@#dr59-B {{candidate constructor (the implicit move constructor) not viable: 1st argument ('const volatile dr59::B') would lose const and volatile qualifiers}}
- // expected-note@#dr59-B {{candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided}}
+ // expected-error at -1 {{no viable constructor copying variable of type 'const volatile cwg59::B'}}
+ // expected-note@#cwg59-B {{candidate constructor (the implicit copy constructor) not viable: 1st argument ('const volatile cwg59::B') would lose volatile qualifier}}
+ // since-cxx11-note@#cwg59-B {{candidate constructor (the implicit move constructor) not viable: 1st argument ('const volatile cwg59::B') would lose const and volatile qualifiers}}
+ // expected-note@#cwg59-B {{candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided}}
A c1 = convert_to<B>();
A c2 = convert_to<B&>();
A c3 = convert_to<const B>();
A c4 = convert_to<const volatile B>();
- // expected-error at -1 {{no viable constructor copying variable of type 'const volatile dr59::B'}}
- // expected-note@#dr59-A {{candidate constructor (the implicit copy constructor) not viable: no known conversion from 'const volatile dr59::B' to 'const A &' for 1st argument}}
- // since-cxx11-note@#dr59-A {{candidate constructor (the implicit move constructor) not viable: no known conversion from 'const volatile dr59::B' to 'A &&' for 1st argument}}
- // expected-note@#dr59-A {{candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided}}
+ // expected-error at -1 {{no viable constructor copying variable of type 'const volatile cwg59::B'}}
+ // expected-note@#cwg59-A {{candidate constructor (the implicit copy constructor) not viable: no known conversion from 'const volatile cwg59::B' to 'const A &' for 1st argument}}
+ // since-cxx11-note@#cwg59-A {{candidate constructor (the implicit move constructor) not viable: no known conversion from 'const volatile cwg59::B' to 'A &&' for 1st argument}}
+ // expected-note@#cwg59-A {{candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided}}
A c5 = convert_to<const volatile B&>();
- // expected-error at -1 {{no viable constructor copying variable of type 'const volatile dr59::B'}}
- // expected-note@#dr59-A {{candidate constructor (the implicit copy constructor) not viable: no known conversion from 'const volatile dr59::B' to 'const A &' for 1st argument}}
- // since-cxx11-note@#dr59-A {{candidate constructor (the implicit move constructor) not viable: no known conversion from 'const volatile dr59::B' to 'A &&' for 1st argument}}
- // expected-note@#dr59-A {{candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided}}
+ // expected-error at -1 {{no viable constructor copying variable of type 'const volatile cwg59::B'}}
+ // expected-note@#cwg59-A {{candidate constructor (the implicit copy constructor) not viable: no known conversion from 'const volatile cwg59::B' to 'const A &' for 1st argument}}
+ // since-cxx11-note@#cwg59-A {{candidate constructor (the implicit move constructor) not viable: no known conversion from 'const volatile cwg59::B' to 'A &&' for 1st argument}}
+ // expected-note@#cwg59-A {{candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided}}
int n1 = convert_to<int>();
int n2 = convert_to<int&>();
@@ -984,14 +984,14 @@ namespace dr59 { // dr59: yes
#pragma clang diagnostic pop
}
-namespace dr60 { // dr60: yes
+namespace cwg60 { // cwg60: yes
void f(int &);
int &f(...);
const int k = 0;
int &n = f(k);
}
-namespace dr61 { // dr61: 3.4
+namespace cwg61 { // cwg61: 3.4
struct X {
static void f();
} x;
@@ -1008,7 +1008,7 @@ namespace dr61 { // dr61: 3.4
// expected-error at -1 {{cannot create a non-constant pointer to member function}}
}
-namespace dr62 { // dr62: 2.9
+namespace cwg62 { // cwg62: 2.9
struct A {
struct { int n; } b;
};
@@ -1019,7 +1019,7 @@ namespace dr62 { // dr62: 2.9
X<A> x1;
A a = get<A>();
- typedef struct { } *NoNameForLinkagePtr; // #dr62-unnamed
+ typedef struct { } *NoNameForLinkagePtr; // #cwg62-unnamed
NoNameForLinkagePtr noNameForLinkagePtr;
struct Danger {
@@ -1028,19 +1028,19 @@ namespace dr62 { // dr62: 2.9
X<NoNameForLinkagePtr> x2;
// cxx98-error at -1 {{template argument uses unnamed type}}
- // cxx98-note@#dr62-unnamed {{unnamed type used in template argument was declared here}}
+ // cxx98-note@#cwg62-unnamed {{unnamed type used in template argument was declared here}}
X<const NoNameForLinkagePtr> x3;
// cxx98-error at -1 {{template argument uses unnamed type}}
- // cxx98-note@#dr62-unnamed {{unnamed type used in template argument was declared here}}
+ // cxx98-note@#cwg62-unnamed {{unnamed type used in template argument was declared here}}
NoNameForLinkagePtr p1 = get<NoNameForLinkagePtr>();
// cxx98-error at -1 {{template argument uses unnamed type}}
- // cxx98-note@#dr62-unnamed {{unnamed type used in template argument was declared here}}
+ // cxx98-note@#cwg62-unnamed {{unnamed type used in template argument was declared here}}
NoNameForLinkagePtr p2 = get<const NoNameForLinkagePtr>();
// cxx98-error at -1 {{template argument uses unnamed type}}
- // cxx98-note@#dr62-unnamed {{unnamed type used in template argument was declared here}}
+ // cxx98-note@#cwg62-unnamed {{unnamed type used in template argument was declared here}}
int n1 = take(noNameForLinkagePtr);
// cxx98-error at -1 {{template argument uses unnamed type}}
- // cxx98-note@#dr62-unnamed {{unnamed type used in template argument was declared here}}
+ // cxx98-note@#cwg62-unnamed {{unnamed type used in template argument was declared here}}
X<Danger> x4;
@@ -1061,13 +1061,13 @@ namespace dr62 { // dr62: 2.9
}
}
-namespace dr63 { // dr63: yes
+namespace cwg63 { // cwg63: yes
template<typename T> struct S { typename T::error e; };
extern S<int> *p;
void *q = p;
}
-namespace dr64 { // dr64: yes
+namespace cwg64 { // cwg64: yes
template<class T> void f(T);
template<class T> void f(T*);
template<> void f(int*);
@@ -1075,11 +1075,11 @@ namespace dr64 { // dr64: yes
template<> void f(int);
}
-// dr65: na
+// cwg65: na
-namespace dr66 { // dr66: no
+namespace cwg66 { // cwg66: no
namespace X {
- int f(int n); // #dr66-f-first
+ int f(int n); // #cwg66-f-first
}
using X::f;
namespace X {
@@ -1089,36 +1089,36 @@ namespace dr66 { // dr66: no
// FIXME: The first two calls here should be accepted.
int a = f();
// expected-error at -1 {{no matching function for call to 'f'}}
- // expected-note@#dr66-f-first {{candidate function not viable: requires single argument 'n', but no arguments were provided}}
+ // expected-note@#cwg66-f-first {{candidate function not viable: requires single argument 'n', but no arguments were provided}}
int b = f(1);
int c = f(1, 2);
// expected-error at -1 {{no matching function for call to 'f'}}
- // expected-note@#dr66-f-first {{candidate function not viable: requires single argument 'n', but 2 arguments were provided}}
+ // expected-note@#cwg66-f-first {{candidate function not viable: requires single argument 'n', but 2 arguments were provided}}
}
-// dr67: na
+// cwg67: na
-namespace dr68 { // dr68: 2.8
+namespace cwg68 { // cwg68: 2.8
template<typename T> struct X {};
- struct ::dr68::X<int> x1;
- struct ::dr68::template X<int> x2;
+ struct ::cwg68::X<int> x1;
+ struct ::cwg68::template X<int> x2;
// cxx98-error at -1 {{'template' keyword outside of a template}}
struct Y {
friend struct X<int>;
- friend struct ::dr68::X<char>;
- friend struct ::dr68::template X<double>;
+ friend struct ::cwg68::X<char>;
+ friend struct ::cwg68::template X<double>;
// cxx98-error at -1 {{'template' keyword outside of a template}}
};
template<typename>
struct Z {
- friend struct ::dr68::template X<double>;
- friend typename ::dr68::X<double>;
- // cxx98-error at -1 {{unelaborated friend declaration is a C++11 extension; specify 'struct' to befriend 'typename ::dr68::X<double>'}}
+ friend struct ::cwg68::template X<double>;
+ friend typename ::cwg68::X<double>;
+ // cxx98-error at -1 {{unelaborated friend declaration is a C++11 extension; specify 'struct' to befriend 'typename ::cwg68::X<double>'}}
};
}
-namespace dr69 { // dr69: 9
- template<typename T> static void f() {} // #dr69-f
+namespace cwg69 { // cwg69: 9
+ template<typename T> static void f() {} // #cwg69-f
// FIXME: Should we warn here?
inline void g() { f<int>(); }
extern template void f<char>();
@@ -1127,21 +1127,21 @@ namespace dr69 { // dr69: 9
template<void(*)()> struct Q {};
Q<&f<int> > q;
// cxx98-error at -1 {{non-type template argument referring to function 'f<int>' with internal linkage is a C++11 extension}}
- // cxx98-note@#dr69-f {{non-type template argument refers to function here}}
+ // cxx98-note@#cwg69-f {{non-type template argument refers to function here}}
}
-namespace dr70 { // dr70: yes
+namespace cwg70 { // cwg70: yes
template<int> struct A {};
template<int I, int J> int f(int (&)[I + J], A<I>, A<J>);
int arr[7];
int k = f(arr, A<3>(), A<4>());
}
-// dr71: na
-// dr72: dup 69
+// cwg71: na
+// cwg72: dup 69
#if __cplusplus >= 201103L
-namespace dr73 { // dr73: sup 1652
+namespace cwg73 { // cwg73: sup 1652
int a, b;
static_assert(&a + 1 != &b, "");
// expected-error at -1 {{static assertion expression is not an integral constant expression}}
@@ -1149,43 +1149,43 @@ namespace dr73 { // dr73: sup 1652
}
#endif
-namespace dr74 { // dr74: yes
+namespace cwg74 { // cwg74: yes
enum E { k = 5 };
int (*p)[k] = new int[k][k];
}
-namespace dr75 { // dr75: yes
+namespace cwg75 { // cwg75: yes
struct S {
static int n = 0;
// expected-error at -1 {{non-const static data member must be initialized out of line}}
};
}
-namespace dr76 { // dr76: yes
+namespace cwg76 { // cwg76: yes
const volatile int n = 1;
- int arr[n]; // #dr76-vla
- // expected-error@#dr76-vla {{variable length arrays in C++ are a Clang extension}}
- // expected-note@#dr76-vla {{read of volatile-qualified type 'const volatile int' is not allowed in a constant expression}}
- // expected-error@#dr76-vla {{variable length array declaration not allowed at file scope}}
+ int arr[n]; // #cwg76-vla
+ // expected-error@#cwg76-vla {{variable length arrays in C++ are a Clang extension}}
+ // expected-note@#cwg76-vla {{read of volatile-qualified type 'const volatile int' is not allowed in a constant expression}}
+ // expected-error@#cwg76-vla {{variable length array declaration not allowed at file scope}}
}
-namespace dr77 { // dr77: yes
+namespace cwg77 { // cwg77: yes
struct A {
struct B {};
friend struct B;
};
}
-namespace dr78 { // dr78: sup ????
- // Under DR78, this is valid, because 'k' has static storage duration, so is
+namespace cwg78 { // cwg78: sup ????
+ // Under CWG78, this is valid, because 'k' has static storage duration, so is
// zero-initialized.
const int k;
// expected-error at -1 {{default initialization of an object of const type 'const int'}}
}
-// dr79: na
+// cwg79: na
-namespace dr80 { // dr80: 2.9
+namespace cwg80 { // cwg80: 2.9
struct A {
int A;
};
@@ -1205,22 +1205,22 @@ namespace dr80 { // dr80: 2.9
};
}
-// dr81: na
-// dr82: dup 48
+// cwg81: na
+// cwg82: dup 48
-namespace dr83 { // dr83: yes
+namespace cwg83 { // cwg83: yes
int &f(const char*);
char &f(char *);
int &k = f("foo");
}
-namespace dr84 { // dr84: yes
+namespace cwg84 { // cwg84: yes
struct B;
struct A { operator B() const; };
struct C {};
struct B {
- B(B&); // #dr84-copy-ctor
- B(C); // #dr84-ctor-from-C
+ B(B&); // #cwg84-copy-ctor
+ B(C); // #cwg84-ctor-from-C
operator C() const;
};
A a;
@@ -1228,78 +1228,78 @@ namespace dr84 { // dr84: yes
// here. In C++17, we initialize the B object directly using 'A::operator B()'.
B b = a;
// cxx98-14-error at -1 {{no viable constructor copying variable of type 'B'}}
- // cxx98-14-note@#dr84-copy-ctor {{candidate constructor not viable: expects an lvalue for 1st argument}}
- // cxx98-14-note@#dr84-ctor-from-C {{candidate constructor not viable: no known conversion from 'B' to 'C' for 1st argument}}
+ // cxx98-14-note@#cwg84-copy-ctor {{candidate constructor not viable: expects an lvalue for 1st argument}}
+ // cxx98-14-note@#cwg84-ctor-from-C {{candidate constructor not viable: no known conversion from 'B' to 'C' for 1st argument}}
}
-namespace dr85 { // dr85: 3.4
+namespace cwg85 { // cwg85: 3.4
struct A {
struct B;
- struct B {}; // #dr85-B-def
+ struct B {}; // #cwg85-B-def
struct B;
// expected-error at -1 {{class member cannot be redeclared}}
- // expected-note@#dr85-B-def {{previous declaration is here}}
+ // expected-note@#cwg85-B-def {{previous declaration is here}}
union U;
- union U {}; // #dr85-U-def
+ union U {}; // #cwg85-U-def
union U;
// expected-error at -1 {{class member cannot be redeclared}}
- // expected-note@#dr85-U-def {{previous declaration is here}}
+ // expected-note@#cwg85-U-def {{previous declaration is here}}
#if __cplusplus >= 201103L
enum E1 : int;
- enum E1 : int { e1 }; // #dr85-E1-def
+ enum E1 : int { e1 }; // #cwg85-E1-def
enum E1 : int;
// expected-error at -1 {{class member cannot be redeclared}}
- // expected-note@#dr85-E1-def {{previous declaration is here}}
+ // expected-note@#cwg85-E1-def {{previous declaration is here}}
enum class E2;
- enum class E2 { e2 }; // #dr85-E2-def
+ enum class E2 { e2 }; // #cwg85-E2-def
enum class E2;
// expected-error at -1 {{class member cannot be redeclared}}
- // expected-note@#dr85-E2-def {{previous declaration is here}}
+ // expected-note@#cwg85-E2-def {{previous declaration is here}}
#endif
};
template <typename T>
struct C {
- struct B {}; // #dr85-C-B-def
+ struct B {}; // #cwg85-C-B-def
struct B;
// expected-error at -1 {{class member cannot be redeclared}}
- // expected-note@#dr85-C-B-def {{previous declaration is here}}
+ // expected-note@#cwg85-C-B-def {{previous declaration is here}}
};
}
-// dr86: dup 446
+// cwg86: dup 446
-namespace dr87 { // dr87: no
- // FIXME: Superseded by dr1975
+namespace cwg87 { // cwg87: no
+ // FIXME: Superseded by cwg1975
template<typename T> struct X {};
// FIXME: This is invalid.
X<void() throw()> x;
- // This is valid under dr87 but not under dr1975.
+ // This is valid under cwg87 but not under cwg1975.
X<void(void() throw())> y;
}
-namespace dr88 { // dr88: 2.8
+namespace cwg88 { // cwg88: 2.8
template<typename T> struct S {
- static const int a = 1; // #dr88-a
+ static const int a = 1; // #cwg88-a
static const int b;
};
template<> const int S<int>::a = 4;
// expected-error at -1 {{static data member 'a' already has an initializer}}
- // expected-note@#dr88-a {{previous initialization is here}}
+ // expected-note@#cwg88-a {{previous initialization is here}}
template<> const int S<int>::b = 4;
}
-// dr89: na
+// cwg89: na
-namespace dr90 { // dr90: yes
+namespace cwg90 { // cwg90: yes
struct A {
- template<typename T> friend void dr90_f(T);
+ template<typename T> friend void cwg90_f(T);
};
struct B : A {
- template<typename T> friend void dr90_g(T);
+ template<typename T> friend void cwg90_g(T);
struct C {};
union D {};
};
@@ -1307,41 +1307,41 @@ namespace dr90 { // dr90: yes
struct F : B::C {};
void test() {
- dr90_f(A());
- dr90_f(B());
- dr90_f(B::C());
- // expected-error at -1 {{use of undeclared identifier 'dr90_f'}}
- dr90_f(B::D());
- // expected-error at -1 {{use of undeclared identifier 'dr90_f'}}
- dr90_f(E());
- dr90_f(F());
- // expected-error at -1 {{use of undeclared identifier 'dr90_f'}}
-
- dr90_g(A());
- // expected-error at -1 {{use of undeclared identifier 'dr90_g'}}
- dr90_g(B());
- dr90_g(B::C());
- dr90_g(B::D());
- dr90_g(E());
- dr90_g(F());
- // expected-error at -1 {{use of undeclared identifier 'dr90_g'}}
+ cwg90_f(A());
+ cwg90_f(B());
+ cwg90_f(B::C());
+ // expected-error at -1 {{use of undeclared identifier 'cwg90_f'}}
+ cwg90_f(B::D());
+ // expected-error at -1 {{use of undeclared identifier 'cwg90_f'}}
+ cwg90_f(E());
+ cwg90_f(F());
+ // expected-error at -1 {{use of undeclared identifier 'cwg90_f'}}
+
+ cwg90_g(A());
+ // expected-error at -1 {{use of undeclared identifier 'cwg90_g'}}
+ cwg90_g(B());
+ cwg90_g(B::C());
+ cwg90_g(B::D());
+ cwg90_g(E());
+ cwg90_g(F());
+ // expected-error at -1 {{use of undeclared identifier 'cwg90_g'}}
}
}
-namespace dr91 { // dr91: yes
+namespace cwg91 { // cwg91: yes
union U { friend int f(U); };
int k = f(U());
}
-namespace dr92 { // dr92: 4 c++17
+namespace cwg92 { // cwg92: 4 c++17
void f() throw(int, float);
// since-cxx17-error at -1 {{ISO C++17 does not allow dynamic exception specifications}}
// since-cxx17-note at -2 {{use 'noexcept(false)' instead}}
- void (*p)() throw(int) = &f; // #dr92-p
- // since-cxx17-error@#dr92-p {{ISO C++17 does not allow dynamic exception specifications}}
- // since-cxx17-note@#dr92-p {{use 'noexcept(false)' instead}}
- // cxx98-14-error@#dr92-p {{target exception specification is not superset of source}}
- // since-cxx17-warning@#dr92-p {{target exception specification is not superset of source}}
+ void (*p)() throw(int) = &f; // #cwg92-p
+ // since-cxx17-error@#cwg92-p {{ISO C++17 does not allow dynamic exception specifications}}
+ // since-cxx17-note@#cwg92-p {{use 'noexcept(false)' instead}}
+ // cxx98-14-error@#cwg92-p {{target exception specification is not superset of source}}
+ // since-cxx17-warning@#cwg92-p {{target exception specification is not superset of source}}
void (*q)() throw(int);
// since-cxx17-error at -1 {{ISO C++17 does not allow dynamic exception specifications}}
// since-cxx17-note at -2 {{use 'noexcept(false)' instead}}
@@ -1349,17 +1349,17 @@ namespace dr92 { // dr92: 4 c++17
// cxx98-14-error at -1 {{exception specifications are not allowed beyond a single level of indirection}}
// since-cxx17-error at -2 {{cannot initialize a variable of type 'void (**)() throw()' with an rvalue of type 'void (**)() throw(int)'}}
- void g(void() throw()); // #dr92-g
+ void g(void() throw()); // #cwg92-g
// cxx98-14-warning at -1 {{mangled name of 'g' will change in C++17 due to non-throwing exception specification in function signature}}
void h() throw() {
g(f);
// cxx98-14-error at -1 {{target exception specification is not superset of source}}
// since-cxx17-error at -2 {{no matching function for call to 'g'}}
- // since-cxx17-note@#dr92-g {{candidate function not viable: no known conversion from 'void () throw(int, float)' to 'void (*)() throw()' for 1st argument}}
+ // since-cxx17-note@#cwg92-g {{candidate function not viable: no known conversion from 'void () throw(int, float)' to 'void (*)() throw()' for 1st argument}}
g(q);
// cxx98-14-error at -1 {{target exception specification is not superset of source}}
// since-cxx17-error at -2 {{no matching function for call to 'g'}}
- // since-cxx17-note@#dr92-g {{candidate function not viable: no known conversion from 'void (*)() throw(int)' to 'void (*)() throw()' for 1st argument}}
+ // since-cxx17-note@#cwg92-g {{candidate function not viable: no known conversion from 'void (*)() throw(int)' to 'void (*)() throw()' for 1st argument}}
}
// Prior to C++17, this is OK because the exception specification is not
@@ -1376,31 +1376,31 @@ namespace dr92 { // dr92: 4 c++17
Y<&h> yp; // ok
}
-// dr93: na
+// cwg93: na
-namespace dr94 { // dr94: yes
+namespace cwg94 { // cwg94: yes
struct A { static const int n = 5; };
int arr[A::n];
}
-namespace dr95 { // dr95: 3.3
+namespace cwg95 { // cwg95: 3.3
struct A;
struct B;
namespace N {
class C {
friend struct A;
friend struct B;
- static void f(); // #dr95-C-f
+ static void f(); // #cwg95-C-f
};
- struct A *p; // dr95::A, not dr95::N::A.
+ struct A *p; // cwg95::A, not cwg95::N::A.
}
A *q = N::p; // ok, same type
struct B { void f() { N::C::f(); } };
- // expected-error at -1 {{'f' is a private member of 'dr95::N::C'}}
- // expected-note@#dr95-C-f {{implicitly declared private here}}
+ // expected-error at -1 {{'f' is a private member of 'cwg95::N::C'}}
+ // expected-note@#cwg95-C-f {{implicitly declared private here}}
}
-namespace dr96 { // dr96: no
+namespace cwg96 { // cwg96: no
struct A {
void f(int);
template<typename T> int f(T);
@@ -1420,42 +1420,42 @@ namespace dr96 { // dr96: no
}
}
-namespace dr97 { // dr97: yes
+namespace cwg97 { // cwg97: yes
struct A {
static const int a = false;
static const int b = !a;
};
}
-namespace dr98 { // dr98: yes
+namespace cwg98 { // cwg98: yes
void test(int n) {
switch (n) {
- try { // #dr98-try
+ try { // #cwg98-try
case 0:
// expected-error at -1 {{cannot jump from switch statement to this case label}}
- // expected-note@#dr98-try {{jump bypasses initialization of try block}}
+ // expected-note@#cwg98-try {{jump bypasses initialization of try block}}
x:
throw n;
- } catch (...) { // #dr98-catch
+ } catch (...) { // #cwg98-catch
case 1:
// expected-error at -1 {{cannot jump from switch statement to this case label}}
- // expected-note@#dr98-catch {{jump bypasses initialization of catch block}}
+ // expected-note@#cwg98-catch {{jump bypasses initialization of catch block}}
y:
throw n;
}
case 2:
goto x;
// expected-error at -1 {{cannot jump from this goto statement to its label}}
- // expected-note@#dr98-try {{jump bypasses initialization of try block}}
+ // expected-note@#cwg98-try {{jump bypasses initialization of try block}}
case 3:
goto y;
// expected-error at -1 {{cannot jump from this goto statement to its label}}
- // expected-note@#dr98-catch {{jump bypasses initialization of catch block}}
+ // expected-note@#cwg98-catch {{jump bypasses initialization of catch block}}
}
}
}
-namespace dr99 { // dr99: sup 214
+namespace cwg99 { // cwg99: sup 214
template<typename T> void f(T&);
template<typename T> int &f(const T&);
const int n = 0;
diff --git a/clang/test/CXX/drs/dr10xx.cpp b/clang/test/CXX/drs/dr10xx.cpp
index 77c59078414c69..58d552942c77cc 100644
--- a/clang/test/CXX/drs/dr10xx.cpp
+++ b/clang/test/CXX/drs/dr10xx.cpp
@@ -14,26 +14,26 @@ namespace std {
};
}
-namespace dr1004 { // dr1004: 5
+namespace cwg1004 { // cwg1004: 5
template<typename> struct A {};
template<typename> struct B1 {};
template<template<typename> class> struct B2 {};
- template<typename X> void f(); // #dr1004-f-1
- template<template<typename> class X> void f(); // #dr1004-f-2
- template<template<typename> class X> void g(); // #dr1004-g-1
- template<typename X> void g(); // #dr1004-g-2
+ template<typename X> void f(); // #cwg1004-f-1
+ template<template<typename> class X> void f(); // #cwg1004-f-2
+ template<template<typename> class X> void g(); // #cwg1004-g-1
+ template<typename X> void g(); // #cwg1004-g-2
struct C : A<int> {
B1<A> b1a;
B2<A> b2a;
void h() {
f<A>();
// expected-error at -1 {{call to 'f' is ambiguous}}
- // expected-note@#dr1004-f-1 {{candidate function [with X = dr1004::A<int>]}}
- // expected-note@#dr1004-f-2 {{candidate function [with X = dr1004::A]}}
+ // expected-note@#cwg1004-f-1 {{candidate function [with X = cwg1004::A<int>]}}
+ // expected-note@#cwg1004-f-2 {{candidate function [with X = cwg1004::A]}}
g<A>();
// expected-error at -1 {{call to 'g' is ambiguous}}
- // expected-note@#dr1004-g-1 {{candidate function [with X = dr1004::A]}}
- // expected-note@#dr1004-g-2 {{candidate function [with X = dr1004::A<int>]}}
+ // expected-note@#cwg1004-g-1 {{candidate function [with X = cwg1004::A]}}
+ // expected-note@#cwg1004-g-2 {{candidate function [with X = cwg1004::A<int>]}}
}
};
@@ -41,17 +41,17 @@ namespace dr1004 { // dr1004: 5
// name lookup of "T::template A" names the constructor.
template<class T, template<class> class U = T::template A> struct Third { };
// expected-error at -1 {{is a constructor name}}
- // expected-note@#dr1004-t {{in instantiation of default argument}}
- Third<A<int> > t; // #dr1004-t
+ // expected-note@#cwg1004-t {{in instantiation of default argument}}
+ Third<A<int> > t; // #cwg1004-t
}
-namespace dr1042 { // dr1042: 3.5
+namespace cwg1042 { // cwg1042: 3.5
#if __cplusplus >= 201402L
// C++14 added an attribute that we can test the semantics of.
- using foo [[deprecated]] = int; // #dr1042-using
+ using foo [[deprecated]] = int; // #cwg1042-using
foo f = 12;
// since-cxx14-warning at -1 {{'foo' is deprecated}}
- // since-cxx14-note@#dr1042-using {{'foo' has been explicitly marked deprecated here}}
+ // since-cxx14-note@#cwg1042-using {{'foo' has been explicitly marked deprecated here}}
#elif __cplusplus >= 201103L
// C++11 did not have any attributes that could be applied to an alias
// declaration, so the best we can test is that we accept an empty attribute
@@ -60,7 +60,7 @@ namespace dr1042 { // dr1042: 3.5
#endif
}
-namespace dr1048 { // dr1048: 3.6
+namespace cwg1048 { // cwg1048: 3.6
struct A {};
const A f();
A g();
@@ -78,20 +78,20 @@ namespace dr1048 { // dr1048: 3.6
#endif
}
-namespace dr1054 { // dr1054: no
+namespace cwg1054 { // cwg1054: no
// FIXME: Test is incomplete.
struct A {} volatile a;
void f() {
// FIXME: This is wrong: an lvalue-to-rvalue conversion is applied here,
// which copy-initializes a temporary from 'a'. Therefore this is
// ill-formed because A does not have a volatile copy constructor.
- // (We might want to track this aspect under dr1383 instead?)
+ // (We might want to track this aspect under cwg1383 instead?)
a;
// expected-warning at -1 {{expression result unused; assign into a variable to force a volatile load}}
}
}
-namespace dr1070 { // dr1070: 3.5
+namespace cwg1070 { // cwg1070: 3.5
#if __cplusplus >= 201103L
struct A {
A(std::initializer_list<int>);
diff --git a/clang/test/CXX/drs/dr11xx.cpp b/clang/test/CXX/drs/dr11xx.cpp
index a71a105c7eb204..46a0e526be390c 100644
--- a/clang/test/CXX/drs/dr11xx.cpp
+++ b/clang/test/CXX/drs/dr11xx.cpp
@@ -4,27 +4,27 @@
// RUN: %clang_cc1 -std=c++17 %s -verify=expected -fexceptions -fcxx-exceptions -pedantic-errors
// RUN: %clang_cc1 -std=c++2a %s -verify=expected -fexceptions -fcxx-exceptions -pedantic-errors
-namespace dr1111 { // dr1111: 3.2
+namespace cwg1111 { // cwg1111: 3.2
namespace example1 {
-template <typename> struct set; // #dr1111-struct-set
+template <typename> struct set; // #cwg1111-struct-set
struct X {
- template <typename T> void set(const T &value); // #dr1111-func-set
+ template <typename T> void set(const T &value); // #cwg1111-func-set
};
void foo() {
X x;
// FIXME: should we backport C++11 behavior?
x.set<double>(3.2);
// cxx98-error at -1 {{lookup of 'set' in member access expression is ambiguous; using member of 'X'}}
- // cxx98-note@#dr1111-func-set {{lookup in the object type 'X' refers here}}
- // cxx98-note@#dr1111-struct-set {{lookup from the current scope refers here}}
+ // cxx98-note@#cwg1111-func-set {{lookup in the object type 'X' refers here}}
+ // cxx98-note@#cwg1111-struct-set {{lookup from the current scope refers here}}
}
struct Y {};
void bar() {
Y y;
y.set<double>(3.2);
- // expected-error at -1 {{no member named 'set' in 'dr1111::example1::Y'}}
+ // expected-error at -1 {{no member named 'set' in 'cwg1111::example1::Y'}}
}
} // namespace example1
@@ -42,14 +42,14 @@ void baz() {
a.operator A();
}
} // namespace example2
-} // namespace dr1111
+} // namespace cwg1111
-namespace dr1113 { // dr1113: partial
+namespace cwg1113 { // cwg1113: partial
namespace named {
- extern int a; // #dr1113-a
+ extern int a; // #cwg1113-a
static int a;
// expected-error at -1 {{static declaration of 'a' follows non-static}}
- // expected-note@#dr1113-a {{previous declaration is here}}
+ // expected-note@#cwg1113-a {{previous declaration is here}}
}
namespace {
extern int a;
@@ -57,7 +57,7 @@ namespace dr1113 { // dr1113: partial
int b = a;
}
- // FIXME: Per DR1113 and DR4, this is ill-formed due to ambiguity: the second
+ // FIXME: Per CWG1113 and CWG4, this is ill-formed due to ambiguity: the second
// 'f' has internal linkage, and so does not have C language linkage, so is
// not a redeclaration of the first 'f'.
//
@@ -71,4 +71,4 @@ namespace dr1113 { // dr1113: partial
void g() { f(); }
}
-// dr1150: na
+// cwg1150: na
diff --git a/clang/test/CXX/drs/dr12xx.cpp b/clang/test/CXX/drs/dr12xx.cpp
index da5dd02a00677c..cdfbc6d6726581 100644
--- a/clang/test/CXX/drs/dr12xx.cpp
+++ b/clang/test/CXX/drs/dr12xx.cpp
@@ -5,9 +5,9 @@
// RUN: %clang_cc1 -std=c++20 %s -verify=expected,since-cxx17,since-cxx14,since-cxx11 -fexceptions -fcxx-exceptions -pedantic-errors
// RUN: %clang_cc1 -std=c++23 %s -verify=expected,since-cxx17,since-cxx14,since-cxx11,since-cxx23 -fexceptions -fcxx-exceptions -pedantic-errors
-// dr1200: na
+// cwg1200: na
-namespace dr1213 { // dr1213: 7
+namespace cwg1213 { // cwg1213: 7
#if __cplusplus >= 201103L
using T = int[3];
int &&r = T{}[1];
@@ -32,7 +32,7 @@ namespace dr1213 { // dr1213: 7
}
#if __cplusplus >= 201103L
-namespace dr1223 { // dr1223: 17 drafting 2023-05-12
+namespace cwg1223 { // cwg1223: 17 drafting 2023-05-12
struct M;
template <typename T>
struct V;
@@ -80,31 +80,31 @@ void g() {
A b(auto ()->C);
static_assert(sizeof(B ()->C[1] == sizeof(int)), "");
sizeof(auto () -> C[1]);
- // since-cxx11-error at -1 {{function cannot return array type 'C[1]' (aka 'dr1223::BB[1]')}}
+ // since-cxx11-error at -1 {{function cannot return array type 'C[1]' (aka 'cwg1223::BB[1]')}}
}
}
#endif
#if __cplusplus >= 201103L
-namespace dr1227 { // dr1227: 3.0
+namespace cwg1227 { // cwg1227: 3.0
template <class T> struct A { using X = typename T::X; };
// since-cxx11-error at -1 {{type 'int' cannot be used prior to '::' because it has no members}}
-// since-cxx11-note@#dr1227-g {{in instantiation of template class 'dr1227::A<int>' requested here}}
-// since-cxx11-note@#dr1227-g-int {{while substituting explicitly-specified template arguments into function template 'g'}}
+// since-cxx11-note@#cwg1227-g {{in instantiation of template class 'cwg1227::A<int>' requested here}}
+// since-cxx11-note@#cwg1227-g-int {{while substituting explicitly-specified template arguments into function template 'g'}}
template <class T> typename T::X f(typename A<T>::X);
template <class T> void f(...) { }
-template <class T> auto g(typename A<T>::X) -> typename T::X; // #dr1227-g
+template <class T> auto g(typename A<T>::X) -> typename T::X; // #cwg1227-g
template <class T> void g(...) { }
void h() {
f<int>(0); // OK, substituting return type causes deduction to fail
- g<int>(0); // #dr1227-g-int
+ g<int>(0); // #cwg1227-g-int
}
}
#endif
-namespace dr1250 { // dr1250: 3.9
+namespace cwg1250 { // cwg1250: 3.9
struct Incomplete;
struct Base {
@@ -116,7 +116,7 @@ struct Derived : Base {
};
}
-namespace dr1265 { // dr1265: 5
+namespace cwg1265 { // cwg1265: 5
#if __cplusplus >= 201103L
auto a = 0, b() -> int;
// since-cxx11-error at -1 {{declaration with trailing return type must be the only declaration in its group}}
@@ -136,9 +136,9 @@ namespace dr1265 { // dr1265: 5
#endif
}
-// dr1291: na
+// cwg1291: na
-namespace dr1295 { // dr1295: 4
+namespace cwg1295 { // cwg1295: 4
struct X {
unsigned bitfield : 4;
};
@@ -150,11 +150,11 @@ namespace dr1295 { // dr1295: 4
unsigned const &r2 = static_cast<unsigned &&>(x.bitfield);
// cxx98-error at -1 {{rvalue references are a C++11 extension}}
- template<unsigned &r> struct Y {}; // #dr1295-Y
- Y<x.bitfield> y; // #dr1295-y
+ template<unsigned &r> struct Y {}; // #cwg1295-Y
+ Y<x.bitfield> y; // #cwg1295-y
// cxx98-14-error at -1 {{non-type template argument does not refer to any declaration}}
- // cxx98-14-note@#dr1295-Y {{template parameter is declared here}}
- // since-cxx17-error@#dr1295-y {{reference cannot bind to bit-field in converted constant expression}}
+ // cxx98-14-note@#cwg1295-Y {{template parameter is declared here}}
+ // since-cxx17-error@#cwg1295-y {{reference cannot bind to bit-field in converted constant expression}}
#if __cplusplus >= 201103L
const unsigned other = 0;
diff --git a/clang/test/CXX/drs/dr13xx.cpp b/clang/test/CXX/drs/dr13xx.cpp
index d8e3b5d87bd149..dad82c4e2829f0 100644
--- a/clang/test/CXX/drs/dr13xx.cpp
+++ b/clang/test/CXX/drs/dr13xx.cpp
@@ -17,18 +17,18 @@ namespace std {
}
#if __cplusplus >= 201103L
-namespace dr1305 { // dr1305: 3.0
-struct Incomplete; // #dr1305-Incomplete
+namespace cwg1305 { // cwg1305: 3.0
+struct Incomplete; // #cwg1305-Incomplete
struct Complete {};
int incomplete = alignof(Incomplete(&)[]);
// since-cxx11-error at -1 {{invalid application of 'alignof' to an incomplete type 'Incomplete'}}
-// since-cxx11-note@#dr1305-Incomplete {{forward declaration of 'dr1305::Incomplete'}}
+// since-cxx11-note@#cwg1305-Incomplete {{forward declaration of 'cwg1305::Incomplete'}}
int complete = alignof(Complete(&)[]);
}
#endif
-namespace dr1307 { // dr1307: 14
+namespace cwg1307 { // cwg1307: 14
#if __cplusplus >= 201103L
void f(int const (&)[2]);
void f(int const (&)[3]);
@@ -38,11 +38,11 @@ void caller() {
f({1, 2, 3});
}
#endif // __cplusplus >= 201103L
-} // namespace dr1307
+} // namespace cwg1307
-// dr1308: sup 1330
+// cwg1308: sup 1330
-namespace dr1310 { // dr1310: 5
+namespace cwg1310 { // cwg1310: 5
struct S {} * sp = new S::S;
// expected-error at -1 {{qualified reference to 'S' is a constructor name rather than a type in this context}}
void f() {
@@ -126,8 +126,8 @@ namespace dr1310 { // dr1310: 5
void wt_test() {
typename W::W w2a;
// expected-error at -1 {{ISO C++ specifies that qualified reference to 'W' is a constructor name rather than a type in this context, despite preceding 'typename' keyword}}
- // cxx98-note@#dr1310-W-int {{in instantiation of function template specialization 'dr1310::wt_test<dr1310::W<int> >' requested here}}
- // since-cxx11-note@#dr1310-W-int {{in instantiation of function template specialization 'dr1310::wt_test<dr1310::W<int>>' requested here}}
+ // cxx98-note@#cwg1310-W-int {{in instantiation of function template specialization 'cwg1310::wt_test<cwg1310::W<int> >' requested here}}
+ // since-cxx11-note@#cwg1310-W-int {{in instantiation of function template specialization 'cwg1310::wt_test<cwg1310::W<int>>' requested here}}
typename W::template W<int> w4;
// expected-error at -1 {{ISO C++ specifies that qualified reference to 'W' is a constructor name rather than a template name in this context, despite preceding 'template' keyword}}
TTy<typename W::W> tt2;
@@ -148,11 +148,11 @@ namespace dr1310 { // dr1310: 5
(void)w.template W<int>::W::n;
(void)w.template W<int>::template W<int>::n;
}
- template void wt_test<W<int> >(); // #dr1310-W-int
+ template void wt_test<W<int> >(); // #cwg1310-W-int
template void wt_test_good<W<int> >();
}
-namespace dr1315 { // dr1315: partial
+namespace cwg1315 { // cwg1315: partial
template <int I, int J> struct A {};
template <int I> struct A<I + 5, I * 2> {};
// expected-error at -1 {{class template partial specialization contains a template parameter that cannot be deduced; this partial specialization will never be used}}
@@ -160,7 +160,7 @@ namespace dr1315 { // dr1315: partial
template <int I> struct A<I, I> {};
template <int I, int J, int K> struct B;
- template <int I, int K> struct B<I, I * 2, K> {}; // #dr1315-B-1
+ template <int I, int K> struct B<I, I * 2, K> {}; // #cwg1315-B-1
B<1, 2, 3> b1;
// Multiple declarations with the same dependent expression are equivalent
@@ -169,13 +169,13 @@ namespace dr1315 { // dr1315: partial
B<1, 2, 2>::type b2;
// Multiple declarations with
diff ering dependent expressions are unordered.
- template <int I, int K> struct B<I, I + 1, K> {}; // #dr1315-B-2
+ template <int I, int K> struct B<I, I + 1, K> {}; // #cwg1315-B-2
B<1, 2, 4> b3;
// expected-error at -1 {{ambiguous partial specializations of 'B<1, 2, 4>'}}
- // expected-note@#dr1315-B-1 {{partial specialization matches [with I = 1, K = 4]}}
- // expected-note@#dr1315-B-2 {{partial specialization matches [with I = 1, K = 4]}}
+ // expected-note@#cwg1315-B-1 {{partial specialization matches [with I = 1, K = 4]}}
+ // expected-note@#cwg1315-B-2 {{partial specialization matches [with I = 1, K = 4]}}
- // FIXME: Under dr1315, this is perhaps valid, but that is not clear: this
+ // FIXME: Under cwg1315, this is perhaps valid, but that is not clear: this
// fails the "more specialized than the primary template" test because the
// dependent type of T::value is not the same as 'int'.
// A core issue will be opened to decide what is supposed to happen here.
@@ -184,7 +184,7 @@ namespace dr1315 { // dr1315: partial
// expected-error at -1 {{type of specialized non-type template argument depends on a template parameter of the partial specialization}}
}
-namespace dr1330 { // dr1330: 4 c++11
+namespace cwg1330 { // cwg1330: 4 c++11
// exception-specifications are parsed in a context where the class is complete.
struct A {
void f() throw(T) {}
@@ -204,7 +204,7 @@ namespace dr1330 { // dr1330: 4 c++11
// since-cxx17-note at -2 {{use 'noexcept(false)' instead}}
void (A::*af2)() throw() = &A::f;
// cxx98-14-error at -1 {{target exception specification is not superset of source}}
- // since-cxx17-error at -2 {{cannot initialize a variable of type 'void (dr1330::A::*)() throw()' with an rvalue of type 'void (dr1330::A::*)() throw(T)':
diff erent exception specifications}}
+ // since-cxx17-error at -2 {{cannot initialize a variable of type 'void (cwg1330::A::*)() throw()' with an rvalue of type 'void (cwg1330::A::*)() throw(T)':
diff erent exception specifications}}
#if __cplusplus >= 201103L
static_assert(noexcept(A().g()), "");
@@ -252,7 +252,7 @@ namespace dr1330 { // dr1330: 4 c++11
void (B<P>::*bpf3)() = &B<P>::f;
void (B<P>::*bpf4)() throw() = &B<P>::f;
// cxx98-14-error at -1 {{target exception specification is not superset of source}}
- // since-cxx17-error at -2 {{cannot initialize a variable of type 'void (B<P>::*)() throw()' with an rvalue of type 'void (dr1330::B<dr1330::P>::*)() throw(T, typename P::type)':
diff erent exception specifications}}
+ // since-cxx17-error at -2 {{cannot initialize a variable of type 'void (B<P>::*)() throw()' with an rvalue of type 'void (cwg1330::B<cwg1330::P>::*)() throw(T, typename P::type)':
diff erent exception specifications}}
#if __cplusplus >= 201103L
static_assert(noexcept(B<P>().g()), "");
@@ -260,73 +260,73 @@ namespace dr1330 { // dr1330: 4 c++11
static_assert(!noexcept(B<Q>().g()), "");
#endif
- template<typename T> int f() throw(typename T::error) { return 0; } // #dr1330-f
- // expected-error@#dr1330-f {{type 'int' cannot be used prior to '::' because it has no members}}
- // cxx98-note@#dr1330-f-int {{in instantiation of function template specialization 'dr1330::f<int>' requested here}}
- // since-cxx11-note@#dr1330-f-int {{in instantiation of exception specification for 'f<int>' requested here}}
- // cxx98-14-error@#dr1330-f {{type 'short' cannot be used prior to '::' because it has no members}}
- // cxx98-14-note@#dr1330-f-short {{in instantiation of function template specialization 'dr1330::f<short>' requested here}}
- // cxx11-14-note@#dr1330-f {{in instantiation of exception specification for 'f<short>' requested here}}
- // since-cxx11-error@#dr1330-f {{type 'char' cannot be used prior to '::' because it has no members}}
- // since-cxx11-note@#dr1330-f-char {{in instantiation of exception specification for 'f<char>' requested here}}
- // since-cxx11-error@#dr1330-f {{type 'float' cannot be used prior to '::' because it has no members}}
- // since-cxx11-note@#dr1330-f-float {{in instantiation of exception specification for 'f<float>' requested here}}
- // since-cxx17-error@#dr1330-f {{ISO C++17 does not allow dynamic exception specifications}}
- // since-cxx17-note@#dr1330-f {{use 'noexcept(false)' instead}}
+ template<typename T> int f() throw(typename T::error) { return 0; } // #cwg1330-f
+ // expected-error@#cwg1330-f {{type 'int' cannot be used prior to '::' because it has no members}}
+ // cxx98-note@#cwg1330-f-int {{in instantiation of function template specialization 'cwg1330::f<int>' requested here}}
+ // since-cxx11-note@#cwg1330-f-int {{in instantiation of exception specification for 'f<int>' requested here}}
+ // cxx98-14-error@#cwg1330-f {{type 'short' cannot be used prior to '::' because it has no members}}
+ // cxx98-14-note@#cwg1330-f-short {{in instantiation of function template specialization 'cwg1330::f<short>' requested here}}
+ // cxx11-14-note@#cwg1330-f {{in instantiation of exception specification for 'f<short>' requested here}}
+ // since-cxx11-error@#cwg1330-f {{type 'char' cannot be used prior to '::' because it has no members}}
+ // since-cxx11-note@#cwg1330-f-char {{in instantiation of exception specification for 'f<char>' requested here}}
+ // since-cxx11-error@#cwg1330-f {{type 'float' cannot be used prior to '::' because it has no members}}
+ // since-cxx11-note@#cwg1330-f-float {{in instantiation of exception specification for 'f<float>' requested here}}
+ // since-cxx17-error@#cwg1330-f {{ISO C++17 does not allow dynamic exception specifications}}
+ // since-cxx17-note@#cwg1330-f {{use 'noexcept(false)' instead}}
// An exception-specification is needed even if the function is only used in
// an unevaluated operand.
- int f1 = sizeof(f<int>()); // #dr1330-f-int
+ int f1 = sizeof(f<int>()); // #cwg1330-f-int
#if __cplusplus >= 201103L
- decltype(f<char>()) f2; // #dr1330-f-char
- bool f3 = noexcept(f<float>()); /// #dr1330-f-float
+ decltype(f<char>()) f2; // #cwg1330-f-char
+ bool f3 = noexcept(f<float>()); /// #cwg1330-f-float
#endif
// In C++17 onwards, substituting explicit template arguments into the
// function type substitutes into the exception specification (because it's
// part of the type). In earlier languages, we don't notice there's a problem
// until we've already started to instantiate.
- template int f<short>(); // #dr1330-f-short
+ template int f<short>(); // #cwg1330-f-short
// since-cxx17-error at -1 {{explicit instantiation of 'f' does not refer to a function template, variable template, member function, member class, or static data member}}
- // since-cxx17-note@#dr1330-f {{candidate template ignored: substitution failure [with T = short]: type 'short' cannot be used prior to '::' because it has no members}}
+ // since-cxx17-note@#cwg1330-f {{candidate template ignored: substitution failure [with T = short]: type 'short' cannot be used prior to '::' because it has no members}}
template<typename T> struct C {
- C() throw(typename T::type); // #dr1330-C
+ C() throw(typename T::type); // #cwg1330-C
// since-cxx17-error at -1 {{ISO C++17 does not allow dynamic exception specifications}}
// since-cxx17-note at -2 {{use 'noexcept(false)' instead}}
- // cxx98-error@#dr1330-C {{type 'void' cannot be used prior to '::' because it has no members}}
- // cxx98-note@#dr1330-C-void {{in instantiation of template class 'dr1330::C<void>' requested here}}
- // expected-error@#dr1330-C {{type 'int' cannot be used prior to '::' because it has no members}}
- // cxx98-note@#dr1330-C-int {{in instantiation of template class 'dr1330::C<int>' requested here}}
- // since-cxx11-note@#dr1330-C-int {{in instantiation of exception specification for 'C' requested here}}
- // since-cxx11-note@#dr1330-e {{in evaluation of exception specification for 'dr1330::E::E' needed here}}
+ // cxx98-error@#cwg1330-C {{type 'void' cannot be used prior to '::' because it has no members}}
+ // cxx98-note@#cwg1330-C-void {{in instantiation of template class 'cwg1330::C<void>' requested here}}
+ // expected-error@#cwg1330-C {{type 'int' cannot be used prior to '::' because it has no members}}
+ // cxx98-note@#cwg1330-C-int {{in instantiation of template class 'cwg1330::C<int>' requested here}}
+ // since-cxx11-note@#cwg1330-C-int {{in instantiation of exception specification for 'C' requested here}}
+ // since-cxx11-note@#cwg1330-e {{in evaluation of exception specification for 'cwg1330::E::E' needed here}}
};
- struct D : C<void> {}; // #dr1330-C-void
+ struct D : C<void> {}; // #cwg1330-C-void
void f(D &d) { d = d; } // ok
- struct E : C<int> {}; // #dr1330-C-int
- E e; // #dr1330-e
+ struct E : C<int> {}; // #cwg1330-C-int
+ E e; // #cwg1330-e
}
-// dr1334: sup 1719
+// cwg1334: sup 1719
-namespace dr1341 { // dr1341: sup P0683R1
+namespace cwg1341 { // cwg1341: sup P0683R1
#if __cplusplus >= 202002L
int a;
-const int b = 0; // #dr1341-b
+const int b = 0; // #cwg1341-b
struct S {
int x1 : 8 = 42;
int x2 : 8 { 42 };
int y1 : true ? 8 : a = 42;
int y2 : true ? 8 : b = 42;
// since-cxx20-error at -1 {{cannot assign to variable 'b' with const-qualified type 'const int'}}
- // since-cxx20-note@#dr1341-b {{variable 'b' declared const here}}
+ // since-cxx20-note@#cwg1341-b {{variable 'b' declared const here}}
int y3 : (true ? 8 : b) = 42;
int z : 1 || new int { 0 };
};
#endif
}
-namespace dr1346 { // dr1346: 3.5
+namespace cwg1346 { // cwg1346: 3.5
auto a(1);
// cxx98-error at -1 {{'auto' type specifier is a C++11 extension}}
auto b(1, 2);
@@ -345,9 +345,9 @@ namespace dr1346 { // dr1346: 3.5
auto x(ts...);
// cxx98-error at -1 {{'auto' type specifier is a C++11 extension}}
// expected-error at -2 {{initializer for variable 'x' with type 'auto' is empty}}
- // expected-note@#dr1346-f {{in instantiation of function template specialization 'dr1346::f<>' requested here}}
+ // expected-note@#cwg1346-f {{in instantiation of function template specialization 'cwg1346::f<>' requested here}}
}
- template void f(); // #dr1346-f
+ template void f(); // #cwg1346-f
#if __cplusplus >= 201103L
void init_capture() {
@@ -369,7 +369,7 @@ namespace dr1346 { // dr1346: 3.5
#endif
}
-namespace dr1347 { // dr1347: 3.1
+namespace cwg1347 { // cwg1347: 3.1
auto x = 5, *y = &x;
// cxx98-error at -1 {{'auto' type specifier is a C++11 extension}}
auto z = y, *q = y;
@@ -383,7 +383,7 @@ namespace dr1347 { // dr1347: 3.1
#endif
}
-namespace dr1350 { // dr1350: 3.5
+namespace cwg1350 { // cwg1350: 3.5
#if __cplusplus >= 201103L
struct NoexceptCtor {
NoexceptCtor(int) noexcept {}
@@ -452,12 +452,12 @@ struct D4 : NoexceptCtor, ThrowingDefaultArgTemplate {
static_assert(!__is_nothrow_constructible(D4, int), "");
#endif
-} // namespace dr1350
+} // namespace cwg1350
-namespace dr1358 { // dr1358: 3.1
+namespace cwg1358 { // cwg1358: 3.1
#if __cplusplus >= 201103L
struct Lit { constexpr operator int() const { return 0; } };
- struct NonLit { NonLit(); operator int(); }; // #dr1358-NonLit
+ struct NonLit { NonLit(); operator int(); }; // #cwg1358-NonLit
struct NonConstexprConv { constexpr operator int() const; };
struct Virt { virtual int f(int) const; };
@@ -486,83 +486,83 @@ namespace dr1358 { // dr1358: 3.1
int member;
constexpr B(NonLit u) : member(u) {}
// cxx11-20-error at -1 {{constexpr constructor's 1st parameter type 'NonLit' is not a literal type}}
- // cxx11-20-note@#dr1358-NonLit {{'NonLit' is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors}}
+ // cxx11-20-note@#cwg1358-NonLit {{'NonLit' is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors}}
constexpr NonLit f(NonLit u) const { return NonLit(); }
// cxx11-20-error at -1 {{constexpr function's return type 'NonLit' is not a literal type}}
- // cxx11-20-note@#dr1358-NonLit {{'NonLit' is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors}}
+ // cxx11-20-note@#cwg1358-NonLit {{'NonLit' is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors}}
};
#endif
}
-namespace dr1359 { // dr1359: 3.5
+namespace cwg1359 { // cwg1359: 3.5
#if __cplusplus >= 201103L
union A { constexpr A() = default; };
- union B { constexpr B() = default; int a; }; // #dr1359-B
+ union B { constexpr B() = default; int a; }; // #cwg1359-B
// cxx11-17-error at -1 {{defaulted definition of default constructor cannot be marked constexpr before C++23}}
- union C { constexpr C() = default; int a, b; }; // #dr1359-C
+ union C { constexpr C() = default; int a, b; }; // #cwg1359-C
// cxx11-17-error at -1 {{defaulted definition of default constructor cannot be marked constexpr}}
struct X { constexpr X() = default; union {}; };
// since-cxx11-error at -1 {{declaration does not declare anything}}
- struct Y { constexpr Y() = default; union { int a; }; }; // #dr1359-Y
+ struct Y { constexpr Y() = default; union { int a; }; }; // #cwg1359-Y
// cxx11-17-error at -1 {{defaulted definition of default constructor cannot be marked constexpr}}
constexpr A a = A();
constexpr B b = B();
// cxx11-17-error at -1 {{no matching constructor for initialization of 'B'}}
- // cxx11-17-note@#dr1359-B {{candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0 were provided}}
- // cxx11-17-note@#dr1359-B {{candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 0 were provided}}
+ // cxx11-17-note@#cwg1359-B {{candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0 were provided}}
+ // cxx11-17-note@#cwg1359-B {{candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 0 were provided}}
constexpr C c = C();
// cxx11-17-error at -1 {{no matching constructor for initialization of 'C'}}
- // cxx11-17-note@#dr1359-C {{candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0 were provided}}
- // cxx11-17-note@#dr1359-C {{candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 0 were provided}}
+ // cxx11-17-note@#cwg1359-C {{candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0 were provided}}
+ // cxx11-17-note@#cwg1359-C {{candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 0 were provided}}
constexpr X x = X();
constexpr Y y = Y();
// cxx11-17-error at -1 {{no matching constructor for initialization of 'Y'}}
- // cxx11-17-note@#dr1359-Y {{candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0 were provided}}
- // cxx11-17-note@#dr1359-Y {{candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 0 were provided}}
+ // cxx11-17-note@#cwg1359-Y {{candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0 were provided}}
+ // cxx11-17-note@#cwg1359-Y {{candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 0 were provided}}
#endif
}
-namespace dr1388 { // dr1388: 4
- template<typename A, typename ...T> void f(T..., A); // #dr1388-f
+namespace cwg1388 { // cwg1388: 4
+ template<typename A, typename ...T> void f(T..., A); // #cwg1388-f
// cxx98-error at -1 {{variadic templates are a C++11 extension}}
- template<typename ...T> void g(T..., int); // #dr1388-g
+ template<typename ...T> void g(T..., int); // #cwg1388-g
// cxx98-error at -1 {{variadic templates are a C++11 extension}}
- template<typename ...T, typename A> void h(T..., A); // #dr1388-h
+ template<typename ...T, typename A> void h(T..., A); // #cwg1388-h
// cxx98-error at -1 {{variadic templates are a C++11 extension}}
void test_f() {
f(0); // ok, trailing parameter pack deduced to empty
f(0, 0);
// expected-error at -1 {{no matching function for call to 'f'}}
- // expected-note@#dr1388-f {{candidate function [with A = int, T = <>] not viable: requires 1 argument, but 2 were provided}}
+ // expected-note@#cwg1388-f {{candidate function [with A = int, T = <>] not viable: requires 1 argument, but 2 were provided}}
f<int>(0);
f<int>(0, 0);
// expected-error at -1 {{no matching function for call to 'f'}}
- // expected-note@#dr1388-f {{candidate function [with A = int, T = <>] not viable: requires 1 argument, but 2 were provided}}
+ // expected-note@#cwg1388-f {{candidate function [with A = int, T = <>] not viable: requires 1 argument, but 2 were provided}}
f<int, int>(0, 0);
f<int, int, int>(0, 0);
// expected-error at -1 {{no matching function for call to 'f'}}
- // expected-note@#dr1388-f {{candidate function [with A = int, T = <int, int>] not viable: requires 3 arguments, but 2 were provided}}
+ // expected-note@#cwg1388-f {{candidate function [with A = int, T = <int, int>] not viable: requires 3 arguments, but 2 were provided}}
g(0);
g(0, 0);
// expected-error at -1 {{no matching function for call to 'g'}}
- // expected-note@#dr1388-g {{candidate function [with T = <>] not viable: requires 1 argument, but 2 were provided}}
+ // expected-note@#cwg1388-g {{candidate function [with T = <>] not viable: requires 1 argument, but 2 were provided}}
g<>(0);
g<int>(0);
// expected-error at -1 {{no matching function for call to 'g'}}
- // expected-note@#dr1388-g {{candidate function [with T = <int>] not viable: requires 2 arguments, but 1 was provided}}
+ // expected-note@#cwg1388-g {{candidate function [with T = <int>] not viable: requires 2 arguments, but 1 was provided}}
g<int>(0, 0);
h(0);
h(0, 0);
// expected-error at -1 {{no matching function for call to 'h'}}
- // expected-note@#dr1388-h {{candidate function [with T = <>, A = int] not viable: requires 1 argument, but 2 were provided}}
+ // expected-note@#cwg1388-h {{candidate function [with T = <>, A = int] not viable: requires 1 argument, but 2 were provided}}
h<int>(0, 0);
h<int, int>(0, 0);
// expected-error at -1 {{no matching function for call to 'h'}}
- // expected-note@#dr1388-h {{candidate template ignored: couldn't infer template argument 'A'}}
+ // expected-note@#cwg1388-h {{candidate template ignored: couldn't infer template argument 'A'}}
}
// A non-trailing parameter pack is still a non-deduced context, even though
@@ -570,40 +570,40 @@ namespace dr1388 { // dr1388: 4
template<typename T, typename U> struct pair {};
template<typename ...T> struct tuple { typedef char type; }; //
// cxx98-error at -1 {{variadic templates are a C++11 extension}}
- template<typename ...T, typename ...U> void f_pair_1(pair<T, U>..., int); // #dr1388-f-1
+ template<typename ...T, typename ...U> void f_pair_1(pair<T, U>..., int); // #cwg1388-f-1
// cxx98-error at -1 {{variadic templates are a C++11 extension}}
// cxx98-error at -2 {{variadic templates are a C++11 extension}}
template<typename ...T, typename U> void f_pair_2(pair<T, char>..., U);
// cxx98-error at -1 {{variadic templates are a C++11 extension}}
- template<typename ...T, typename ...U> void f_pair_3(pair<T, U>..., tuple<U...>); // #dr1388-f-3
+ template<typename ...T, typename ...U> void f_pair_3(pair<T, U>..., tuple<U...>); // #cwg1388-f-3
// cxx98-error at -1 {{variadic templates are a C++11 extension}}
// cxx98-error at -2 {{variadic templates are a C++11 extension}}
- template<typename ...T> void f_pair_4(pair<T, char>..., T...); // #dr1388-f-4
+ template<typename ...T> void f_pair_4(pair<T, char>..., T...); // #cwg1388-f-4
// cxx98-error at -1 {{variadic templates are a C++11 extension}}
void g(pair<int, char> a, pair<long, char> b, tuple<char, char> c) {
f_pair_1<int, long>(a, b, 0);
// expected-error at -1 {{no matching function for call to 'f_pair_1'}}
- // expected-note@#dr1388-f-1 {{candidate template ignored: substitution failure [with T = <int, long>]: deduced incomplete pack <(no value), (no value)> for template parameter 'U'}}
+ // expected-note@#cwg1388-f-1 {{candidate template ignored: substitution failure [with T = <int, long>]: deduced incomplete pack <(no value), (no value)> for template parameter 'U'}}
f_pair_2<int, long>(a, b, 0);
f_pair_3<int, long>(a, b, c);
f_pair_3<int, long>(a, b, tuple<char>());
// expected-error at -1 {{no matching function for call to 'f_pair_3'}}
- // expected-note@#dr1388-f-3 {{candidate template ignored: deduced packs of
diff erent lengths for parameter 'U' (<(no value), (no value)> vs. <char>)}}
+ // expected-note@#cwg1388-f-3 {{candidate template ignored: deduced packs of
diff erent lengths for parameter 'U' (<(no value), (no value)> vs. <char>)}}
f_pair_4<int, long>(a, b, 0, 0L);
f_pair_4<int, long>(a, b, 0, 0L, "foo");
// expected-error at -1 {{no matching function for call to 'f_pair_4'}}
- // expected-note@#dr1388-f-4 {{candidate template ignored: deduced packs of
diff erent lengths for parameter 'T' (<int, long> vs. <int, long, const char *>)}}
+ // expected-note@#cwg1388-f-4 {{candidate template ignored: deduced packs of
diff erent lengths for parameter 'T' (<int, long> vs. <int, long, const char *>)}}
}
}
-namespace dr1391 { // dr1391: partial
+namespace cwg1391 { // cwg1391: partial
struct A {}; struct B : A {};
- template<typename T> struct C { C(int); typename T::error error; }; // #dr1391-C
- // expected-error@#dr1391-C {{type 'int' cannot be used prior to '::' because it has no members}}
- // expected-note@#dr1391-b {{in instantiation of template class 'dr1391::C<int>' requested here}}
- // expected-note@#dr1391-b {{while substituting deduced template arguments into function template 'b' [with T = int]}}
- // expected-error@#dr1391-C {{type 'double' cannot be used prior to '::' because it has no members}}
- // expected-note@#dr1391-c {{in instantiation of template class 'dr1391::C<double>' requested here}}
+ template<typename T> struct C { C(int); typename T::error error; }; // #cwg1391-C
+ // expected-error@#cwg1391-C {{type 'int' cannot be used prior to '::' because it has no members}}
+ // expected-note@#cwg1391-b {{in instantiation of template class 'cwg1391::C<int>' requested here}}
+ // expected-note@#cwg1391-b {{while substituting deduced template arguments into function template 'b' [with T = int]}}
+ // expected-error@#cwg1391-C {{type 'double' cannot be used prior to '::' because it has no members}}
+ // expected-note@#cwg1391-c {{in instantiation of template class 'cwg1391::C<double>' requested here}}
template<typename T> struct D {};
// No deduction is performed for parameters with no deducible template-parameters, therefore types do not need to match.
@@ -644,42 +644,42 @@ namespace dr1391 { // dr1391: partial
void test_b() {
b(0, 0); // ok, deduction fails prior to forming a conversion sequence and instantiating C<int>
// FIXME: The "while substituting" note should point at the overload candidate.
- b<int>(0, 0); // #dr1391-b
+ b<int>(0, 0); // #cwg1391-b
}
template<typename T> struct Id { typedef T type; };
template<typename T> void c(T, typename Id<C<T> >::type);
void test_c() {
// Implicit conversion sequences for dependent types are checked later.
- c(0.0, 0); // #dr1391-c
+ c(0.0, 0); // #cwg1391-c
}
namespace partial_ordering {
// FIXME: Second template should be considered more specialized because non-dependent parameter is ignored.
- template<typename T> int a(T, short) = delete; // #dr1391-a-short
+ template<typename T> int a(T, short) = delete; // #cwg1391-a-short
// cxx98-error at -1 {{deleted function definitions are a C++11 extension}}
- template<typename T> int a(T*, char); // #dr1391-a-char
+ template<typename T> int a(T*, char); // #cwg1391-a-char
int test_a = a((int*)0, 0);
// expected-error at -1 {{call to 'a' is ambiguous}} FIXME
- // expected-note@#dr1391-a-short {{candidate function [with T = int *] has been explicitly deleted}}
- // expected-note@#dr1391-a-char {{candidate function [with T = int]}}
+ // expected-note@#cwg1391-a-short {{candidate function [with T = int *] has been explicitly deleted}}
+ // expected-note@#cwg1391-a-char {{candidate function [with T = int]}}
// FIXME: Second template should be considered more specialized:
// deducing #1 from #2 ignores the second P/A pair, so deduction succeeds,
// deducing #2 from #1 fails to deduce T, so deduction fails.
- template<typename T> int b(T, int) = delete; // #dr1391-b-int
+ template<typename T> int b(T, int) = delete; // #cwg1391-b-int
// cxx98-error at -1 {{deleted function definitions are a C++11 extension}}
- template<typename T, typename U> int b(T*, U); // #dr1391-b-U
+ template<typename T, typename U> int b(T*, U); // #cwg1391-b-U
int test_b = b((int*)0, 0);
// expected-error at -1 {{call to 'b' is ambiguous}} FIXME
- // expected-note@#dr1391-b-int {{candidate function [with T = int *] has been explicitly deleted}}
- // expected-note@#dr1391-b-U {{candidate function [with T = int, U = int]}}
+ // expected-note@#cwg1391-b-int {{candidate function [with T = int *] has been explicitly deleted}}
+ // expected-note@#cwg1391-b-U {{candidate function [with T = int, U = int]}}
// Unintended consequences: because partial ordering does not consider
// explicit template arguments, and deduction from a non-dependent type
// vacuously succeeds, a non-dependent template is less specialized than
// anything else!
- // According to DR1391, this is ambiguous!
+ // According to CWG1391, this is ambiguous!
template<typename T> int c(int);
template<typename T> int c(T);
int test_c1 = c(0); // ok
@@ -687,46 +687,46 @@ namespace dr1391 { // dr1391: partial
}
}
-namespace dr1394 { // dr1394: 15
+namespace cwg1394 { // cwg1394: 15
#if __cplusplus >= 201103L
struct Incomplete;
Incomplete f(Incomplete) = delete; // well-formed
#endif
}
-namespace dr1395 { // dr1395: 16
+namespace cwg1395 { // cwg1395: 16
#if __cplusplus >= 201103L
template <typename T, typename... U> void f(T, U...);
template <typename T> void f(T);
void h(int i) {
- // This is made ambiguous by dr692, but made valid again by dr1395.
+ // This is made ambiguous by cwg692, but made valid again by cwg1395.
f(&i);
}
#endif
}
-namespace dr1397 { // dr1397: 3.2
+namespace cwg1397 { // cwg1397: 3.2
#if __cplusplus >= 201103L
struct A {
// cxx11-error at -1 {{default member initializer for 'p' needed within definition of enclosing class 'A' outside of member functions}}
-// cxx11-note@#dr1397-p {{in evaluation of exception specification for 'dr1397::A::A' needed here}}
-// cxx11-note@#dr1397-p {{default member initializer declared here}}
- void *p = A{}; // #dr1397-p
+// cxx11-note@#cwg1397-p {{in evaluation of exception specification for 'cwg1397::A::A' needed here}}
+// cxx11-note@#cwg1397-p {{default member initializer declared here}}
+ void *p = A{}; // #cwg1397-p
// since-cxx14-error at -1 {{default member initializer for 'p' needed within definition of enclosing class 'A' outside of member functions}}
// since-cxx14-note at -2 {{default member initializer declared here}}
operator void*() const { return nullptr; }
};
#endif
-} // namespace dr1397
+} // namespace cwg1397
-namespace dr1399 { // dr1399: dup 1388
- template<typename ...T> void f(T..., int, T...) {} // #dr1399-f
+namespace cwg1399 { // cwg1399: dup 1388
+ template<typename ...T> void f(T..., int, T...) {} // #cwg1399-f
// cxx98-error at -1 {{variadic templates are a C++11 extension}}
void g() {
f(0);
f<int>(0, 0, 0);
f(0, 0, 0);
// expected-error at -1 {{no matching function for call to 'f'}}
- // expected-note@#dr1399-f {{candidate template ignored: deduced packs of
diff erent lengths for parameter 'T' (<> vs. <int, int>)}}
+ // expected-note@#cwg1399-f {{candidate template ignored: deduced packs of
diff erent lengths for parameter 'T' (<> vs. <int, int>)}}
}
}
diff --git a/clang/test/CXX/drs/dr14xx.cpp b/clang/test/CXX/drs/dr14xx.cpp
index ed6dda731fd518..9ff9a68dc13c30 100644
--- a/clang/test/CXX/drs/dr14xx.cpp
+++ b/clang/test/CXX/drs/dr14xx.cpp
@@ -6,7 +6,7 @@
// RUN: %clang_cc1 -std=c++23 %s -verify=expected,since-cxx11,since-cxx14,since-cxx20 -fexceptions -fcxx-exceptions -pedantic-errors
// RUN: %clang_cc1 -std=c++2c %s -verify=expected,since-cxx11,since-cxx14,since-cxx20 -fexceptions -fcxx-exceptions -pedantic-errors
-namespace dr1413 { // dr1413: 12
+namespace cwg1413 { // cwg1413: 12
template<int> struct Check {
typedef int type;
};
@@ -21,28 +21,28 @@ namespace dr1413 { // dr1413: 12
// expected-error at -1 {{use of undeclared identifier 'var1'}}
// ok, variable declaration
- Check<true ? 0 : a>::type *var2; // #dr1413-var2
+ Check<true ? 0 : a>::type *var2; // #cwg1413-var2
Check<true ? 0 : b>::type *var3;
// expected-error at -1 {{use of undeclared identifier 'var3'}}
- // expected-note@#dr1413-var2 {{'var2' declared here}}
+ // expected-note@#cwg1413-var2 {{'var2' declared here}}
Check<true ? 0 : ((void)c, 0)>::type *var4;
// expected-error at -1 {{use of undeclared identifier 'var4'}}
- // expected-note@#dr1413-var2 {{'var2' declared here}}
+ // expected-note@#cwg1413-var2 {{'var2' declared here}}
// value-dependent because of the implied type-dependent 'this->', not because of 'd'
Check<true ? 0 : (d(), 0)>::type *var5;
// expected-error at -1 {{use of undeclared identifier 'var5'}}
- // expected-note@#dr1413-var2 {{'var2' declared here}}
+ // expected-note@#cwg1413-var2 {{'var2' declared here}}
// value-dependent because of the value-dependent '&' operator, not because of 'A::d'
Check<true ? 0 : (&A::d(), 0)>::type *var5;
// expected-error at -1 {{use of undeclared identifier 'var5'}}
- // expected-note@#dr1413-var2 {{'var2' declared here}}
+ // expected-note@#cwg1413-var2 {{'var2' declared here}}
}
};
}
-namespace dr1423 { // dr1423: 11
+namespace cwg1423 { // cwg1423: 11
#if __cplusplus >= 201103L
bool b1 = nullptr;
// since-cxx11-error at -1 {{cannot initialize a variable of type 'bool' with an rvalue of type 'std::nullptr_t'}}
@@ -55,9 +55,9 @@ namespace dr1423 { // dr1423: 11
#endif
}
-// dr1425: na abi
+// cwg1425: na abi
-namespace dr1432 { // dr1432: 16
+namespace cwg1432 { // cwg1432: 16
#if __cplusplus >= 201103L
template<typename T> T declval();
@@ -78,7 +78,7 @@ namespace dr1432 { // dr1432: 16
#endif
}
-namespace dr1443 { // dr1443: yes
+namespace cwg1443 { // cwg1443: yes
struct A {
int i;
A() { void foo(int=i); }
@@ -86,7 +86,7 @@ struct A {
};
}
-namespace dr1460 { // dr1460: 3.5
+namespace cwg1460 { // cwg1460: 3.5
#if __cplusplus >= 201103L
namespace DRExample {
union A {
@@ -121,23 +121,23 @@ namespace dr1460 { // dr1460: 3.5
}
union A {};
- union B { int n; }; // #dr1460-B
+ union B { int n; }; // #cwg1460-B
union C { int n = 0; };
struct D { union {}; };
// expected-error at -1 {{declaration does not declare anything}}
- struct E { union { int n; }; }; // #dr1460-E
+ struct E { union { int n; }; }; // #cwg1460-E
struct F { union { int n = 0; }; };
struct X {
friend constexpr A::A() noexcept;
friend constexpr B::B() noexcept;
// cxx11-17-error at -1 {{constexpr declaration of 'B' follows non-constexpr declaration}}
- // cxx11-17-note@#dr1460-B {{previous declaration is here}}
+ // cxx11-17-note@#cwg1460-B {{previous declaration is here}}
friend constexpr C::C() noexcept;
friend constexpr D::D() noexcept;
friend constexpr E::E() noexcept;
// cxx11-17-error at -1 {{constexpr declaration of 'E' follows non-constexpr declaration}}
- // cxx11-17-note@#dr1460-E {{previous declaration is here}}
+ // cxx11-17-note@#cwg1460-E {{previous declaration is here}}
friend constexpr F::F() noexcept;
};
@@ -167,63 +167,63 @@ namespace dr1460 { // dr1460: 3.5
union {
int n = 0;
};
- union { // #dr1460-H-union
+ union { // #cwg1460-H-union
int m;
};
constexpr H() {}
// cxx11-17-error at -1 {{constexpr constructor that does not initialize all members is a C++20 extension}}
- // cxx11-17-note@#dr1460-H-union {{member not initialized by constructor}}
+ // cxx11-17-note@#cwg1460-H-union {{member not initialized by constructor}}
constexpr H(bool) : m(1) {}
constexpr H(char) : n(1) {}
// cxx11-17-error at -1 {{constexpr constructor that does not initialize all members is a C++20 extension}}
- // cxx11-17-note@#dr1460-H-union {{member not initialized by constructor}}
+ // cxx11-17-note@#cwg1460-H-union {{member not initialized by constructor}}
constexpr H(double) : m(1), n(1) {}
};
}
#if __cplusplus >= 201403L
template<typename T> constexpr bool check() {
- T t; // #dr1460-t
+ T t; // #cwg1460-t
return true;
}
static_assert(check<A>(), "");
- static_assert(check<B>(), ""); // #dr1460-check-B
+ static_assert(check<B>(), ""); // #cwg1460-check-B
// cxx14-17-error at -1 {{static assertion expression is not an integral constant expression}}
- // cxx14-17-note@#dr1460-t {{non-constexpr constructor 'B' cannot be used in a constant expression}}
- // cxx14-17-note@#dr1460-check-B {{in call to 'check<dr1460::B>()'}}
- // cxx14-17-note@#dr1460-B {{declared here}}
+ // cxx14-17-note@#cwg1460-t {{non-constexpr constructor 'B' cannot be used in a constant expression}}
+ // cxx14-17-note@#cwg1460-check-B {{in call to 'check<cwg1460::B>()'}}
+ // cxx14-17-note@#cwg1460-B {{declared here}}
static_assert(check<C>(), "");
static_assert(check<D>(), "");
- static_assert(check<E>(), ""); // #dr1460-check-E
+ static_assert(check<E>(), ""); // #cwg1460-check-E
// cxx14-17-error at -1 {{static assertion expression is not an integral constant expression}}
- // cxx14-17-note@#dr1460-t {{non-constexpr constructor 'E' cannot be used in a constant expression}}
- // cxx14-17-note@#dr1460-check-E {{in call to 'check<dr1460::E>()'}}
- // cxx14-17-note@#dr1460-E {{declared here}}
+ // cxx14-17-note@#cwg1460-t {{non-constexpr constructor 'E' cannot be used in a constant expression}}
+ // cxx14-17-note@#cwg1460-check-E {{in call to 'check<cwg1460::E>()'}}
+ // cxx14-17-note@#cwg1460-E {{declared here}}
static_assert(check<F>(), "");
#endif
union G {
- int a = 0; // #dr1460-G-a
+ int a = 0; // #cwg1460-G-a
int b = 0;
// expected-error at -1 {{initializing multiple members of union}}
- // expected-note@#dr1460-G-a {{previous initialization is here}}
+ // expected-note@#cwg1460-G-a {{previous initialization is here}}
};
union H {
union {
- int a = 0; // #dr1460-H-a
+ int a = 0; // #cwg1460-H-a
};
union {
int b = 0;
// expected-error at -1 {{initializing multiple members of union}}
- // expected-note@#dr1460-H-a {{previous initialization is here}}
+ // expected-note@#cwg1460-H-a {{previous initialization is here}}
};
};
struct I {
union {
- int a = 0; // #dr1460-I-a
+ int a = 0; // #cwg1460-I-a
int b = 0;
// expected-error at -1 {{initializing multiple members of union}}
- // expected-note@#dr1460-I-a {{previous initialization is here}}
+ // expected-note@#cwg1460-I-a {{previous initialization is here}}
};
};
struct J {
@@ -374,9 +374,9 @@ namespace std {
} // std
#endif
-namespace dr1467 { // dr1467: 3.7 c++11
+namespace cwg1467 { // cwg1467: 3.7 c++11
#if __cplusplus >= 201103L
- // Note that the change to [over.best.ics] was partially undone by DR2076;
+ // Note that the change to [over.best.ics] was partially undone by CWG2076;
// the resulting rule is tested with the tests for that change.
// List-initialization of aggregate from same-type object
@@ -441,12 +441,12 @@ namespace dr1467 { // dr1467: 3.7 c++11
X x;
X x2{x};
- void f1(int); // #dr1467-f1
- void f1(std::initializer_list<long>) = delete; // #dr1467-f1-deleted
+ void f1(int); // #cwg1467-f1
+ void f1(std::initializer_list<long>) = delete; // #cwg1467-f1-deleted
void g1() { f1({42}); }
// since-cxx11-error at -1 {{call to deleted function 'f1'}}
- // since-cxx11-note@#dr1467-f1 {{candidate function}}
- // since-cxx11-note@#dr1467-f1-deleted {{candidate function has been explicitly deleted}}
+ // since-cxx11-note@#cwg1467-f1 {{candidate function}}
+ // since-cxx11-note@#cwg1467-f1-deleted {{candidate function has been explicitly deleted}}
template <class T, class U>
struct Pair {
@@ -456,12 +456,12 @@ namespace dr1467 { // dr1467: 3.7 c++11
String(const char *);
};
- void f2(Pair<const char *, const char *>); // #dr1467-f2
- void f2(std::initializer_list<String>) = delete; // #dr1467-f2-deleted
+ void f2(Pair<const char *, const char *>); // #cwg1467-f2
+ void f2(std::initializer_list<String>) = delete; // #cwg1467-f2-deleted
void g2() { f2({"foo", "bar"}); }
// since-cxx11-error at -1 {{call to deleted function 'f2'}}
- // since-cxx11-note@#dr1467-f2 {{candidate function}}
- // since-cxx11-note@#dr1467-f2-deleted {{candidate function has been explicitly deleted}}
+ // since-cxx11-note@#cwg1467-f2 {{candidate function}}
+ // since-cxx11-note@#cwg1467-f2-deleted {{candidate function has been explicitly deleted}}
} // dr_example
namespace nonaggregate {
@@ -522,88 +522,88 @@ namespace dr1467 { // dr1467: 3.7 c++11
// When the array size is 4 the call will attempt to bind an lvalue to an
// rvalue and fail. Therefore #2 will be called. (rsmith will bring this
// issue to CWG)
- void f(const char(&&)[4]); // #dr1467-f-char-4
- void f(const char(&&)[5]) = delete; // #dr1467-f-char-5
- void f(const wchar_t(&&)[4]); // #dr1467-f-wchar-4
- void f(const wchar_t(&&)[5]) = delete; // #dr1467-f-wchar-5
+ void f(const char(&&)[4]); // #cwg1467-f-char-4
+ void f(const char(&&)[5]) = delete; // #cwg1467-f-char-5
+ void f(const wchar_t(&&)[4]); // #cwg1467-f-wchar-4
+ void f(const wchar_t(&&)[5]) = delete; // #cwg1467-f-wchar-5
#if __cplusplus >= 202002L
- void f2(const char8_t(&&)[4]); // #dr1467-f2-char8-4
- void f2(const char8_t(&&)[5]) = delete; // #dr1467-f2-char8-5
+ void f2(const char8_t(&&)[4]); // #cwg1467-f2-char8-4
+ void f2(const char8_t(&&)[5]) = delete; // #cwg1467-f2-char8-5
#endif
- void f(const char16_t(&&)[4]); // #dr1467-f-char16-4
- void f(const char16_t(&&)[5]) = delete; // #dr1467-f-char16-5
- void f(const char32_t(&&)[4]); // #dr1467-f-char32-4
- void f(const char32_t(&&)[5]) = delete; // #dr1467-f-char32-5
+ void f(const char16_t(&&)[4]); // #cwg1467-f-char16-4
+ void f(const char16_t(&&)[5]) = delete; // #cwg1467-f-char16-5
+ void f(const char32_t(&&)[4]); // #cwg1467-f-char32-4
+ void f(const char32_t(&&)[5]) = delete; // #cwg1467-f-char32-5
void g() {
f({"abc"});
// since-cxx11-error at -1 {{call to deleted function 'f'}}
- // since-cxx11-note@#dr1467-f-char-5 {{candidate function has been explicitly deleted}}
- // since-cxx11-note@#dr1467-f-char-4 {{candidate function not viable: expects an rvalue for 1st argument}}
- // since-cxx11-note@#dr1467-f-wchar-4 {{candidate function not viable: no known conversion from 'const char[4]' to 'const wchar_t' for 1st argument}}
- // since-cxx11-note@#dr1467-f-wchar-5 {{candidate function not viable: no known conversion from 'const char[4]' to 'const wchar_t' for 1st argument}}
- // since-cxx11-note@#dr1467-f-char16-4 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char16_t' for 1st argument}}
- // since-cxx11-note@#dr1467-f-char16-5 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char16_t' for 1st argument}}
- // since-cxx11-note@#dr1467-f-char32-4 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char32_t' for 1st argument}}
- // since-cxx11-note@#dr1467-f-char32-5 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char32_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char-5 {{candidate function has been explicitly deleted}}
+ // since-cxx11-note@#cwg1467-f-char-4 {{candidate function not viable: expects an rvalue for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-wchar-4 {{candidate function not viable: no known conversion from 'const char[4]' to 'const wchar_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-wchar-5 {{candidate function not viable: no known conversion from 'const char[4]' to 'const wchar_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char16-4 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char16_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char16-5 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char16_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char32-4 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char32_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char32-5 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char32_t' for 1st argument}}
f({((("abc")))});
// since-cxx11-error at -1 {{call to deleted function 'f'}}
- // since-cxx11-note@#dr1467-f-char-5 {{candidate function has been explicitly deleted}}
- // since-cxx11-note@#dr1467-f-char-4 {{candidate function not viable: expects an rvalue for 1st argument}}
- // since-cxx11-note@#dr1467-f-wchar-4 {{candidate function not viable: no known conversion from 'const char[4]' to 'const wchar_t' for 1st argument}}
- // since-cxx11-note@#dr1467-f-wchar-5 {{candidate function not viable: no known conversion from 'const char[4]' to 'const wchar_t' for 1st argument}}
- // since-cxx11-note@#dr1467-f-char16-4 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char16_t' for 1st argument}}
- // since-cxx11-note@#dr1467-f-char16-5 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char16_t' for 1st argument}}
- // since-cxx11-note@#dr1467-f-char32-4 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char32_t' for 1st argument}}
- // since-cxx11-note@#dr1467-f-char32-5 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char32_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char-5 {{candidate function has been explicitly deleted}}
+ // since-cxx11-note@#cwg1467-f-char-4 {{candidate function not viable: expects an rvalue for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-wchar-4 {{candidate function not viable: no known conversion from 'const char[4]' to 'const wchar_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-wchar-5 {{candidate function not viable: no known conversion from 'const char[4]' to 'const wchar_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char16-4 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char16_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char16-5 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char16_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char32-4 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char32_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char32-5 {{candidate function not viable: no known conversion from 'const char[4]' to 'const char32_t' for 1st argument}}
f({L"abc"});
// since-cxx11-error at -1 {{call to deleted function 'f'}}
- // since-cxx11-note@#dr1467-f-wchar-5 {{candidate function has been explicitly deleted}}
- // since-cxx11-note@#dr1467-f-char-4 {{candidate function not viable: no known conversion from 'const wchar_t[4]' to 'const char' for 1st argument}}
- // since-cxx11-note@#dr1467-f-char-5 {{candidate function not viable: no known conversion from 'const wchar_t[4]' to 'const char' for 1st argument}}
- // since-cxx11-note@#dr1467-f-wchar-4 {{candidate function not viable: expects an rvalue for 1st argument}}
- // since-cxx11-note@#dr1467-f-char16-4 {{candidate function not viable: no known conversion from 'const wchar_t[4]' to 'const char16_t' for 1st argument}}
- // since-cxx11-note@#dr1467-f-char16-5 {{candidate function not viable: no known conversion from 'const wchar_t[4]' to 'const char16_t' for 1st argument}}
- // since-cxx11-note@#dr1467-f-char32-4 {{candidate function not viable: no known conversion from 'const wchar_t[4]' to 'const char32_t' for 1st argument}}
- // since-cxx11-note@#dr1467-f-char32-5 {{candidate function not viable: no known conversion from 'const wchar_t[4]' to 'const char32_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-wchar-5 {{candidate function has been explicitly deleted}}
+ // since-cxx11-note@#cwg1467-f-char-4 {{candidate function not viable: no known conversion from 'const wchar_t[4]' to 'const char' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char-5 {{candidate function not viable: no known conversion from 'const wchar_t[4]' to 'const char' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-wchar-4 {{candidate function not viable: expects an rvalue for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char16-4 {{candidate function not viable: no known conversion from 'const wchar_t[4]' to 'const char16_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char16-5 {{candidate function not viable: no known conversion from 'const wchar_t[4]' to 'const char16_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char32-4 {{candidate function not viable: no known conversion from 'const wchar_t[4]' to 'const char32_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char32-5 {{candidate function not viable: no known conversion from 'const wchar_t[4]' to 'const char32_t' for 1st argument}}
#if __cplusplus >= 202002L
f2({u8"abc"});
// since-cxx20-error at -1 {{call to deleted function 'f2'}}
- // since-cxx20-note@#dr1467-f2-char8-5 {{candidate function has been explicitly deleted}}
- // since-cxx20-note@#dr1467-f2-char8-4 {{candidate function not viable: expects an rvalue for 1st argument}}
+ // since-cxx20-note@#cwg1467-f2-char8-5 {{candidate function has been explicitly deleted}}
+ // since-cxx20-note@#cwg1467-f2-char8-4 {{candidate function not viable: expects an rvalue for 1st argument}}
#endif
f({uR"(abc)"});
// since-cxx11-error at -1 {{call to deleted function 'f'}}
- // since-cxx11-note@#dr1467-f-char16-5 {{candidate function has been explicitly deleted}}
- // since-cxx11-note@#dr1467-f-char-4 {{candidate function not viable: no known conversion from 'const char16_t[4]' to 'const char' for 1st argument}}
- // since-cxx11-note@#dr1467-f-char-5 {{candidate function not viable: no known conversion from 'const char16_t[4]' to 'const char' for 1st argument}}
- // since-cxx11-note@#dr1467-f-wchar-4 {{candidate function not viable: no known conversion from 'const char16_t[4]' to 'const wchar_t' for 1st argument}}
- // since-cxx11-note@#dr1467-f-wchar-5 {{candidate function not viable: no known conversion from 'const char16_t[4]' to 'const wchar_t' for 1st argument}}
- // since-cxx11-note@#dr1467-f-char16-4 {{candidate function not viable: expects an rvalue for 1st argument}}
- // since-cxx11-note@#dr1467-f-char32-4 {{candidate function not viable: no known conversion from 'const char16_t[4]' to 'const char32_t' for 1st argument}}
- // since-cxx11-note@#dr1467-f-char32-5 {{candidate function not viable: no known conversion from 'const char16_t[4]' to 'const char32_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char16-5 {{candidate function has been explicitly deleted}}
+ // since-cxx11-note@#cwg1467-f-char-4 {{candidate function not viable: no known conversion from 'const char16_t[4]' to 'const char' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char-5 {{candidate function not viable: no known conversion from 'const char16_t[4]' to 'const char' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-wchar-4 {{candidate function not viable: no known conversion from 'const char16_t[4]' to 'const wchar_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-wchar-5 {{candidate function not viable: no known conversion from 'const char16_t[4]' to 'const wchar_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char16-4 {{candidate function not viable: expects an rvalue for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char32-4 {{candidate function not viable: no known conversion from 'const char16_t[4]' to 'const char32_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char32-5 {{candidate function not viable: no known conversion from 'const char16_t[4]' to 'const char32_t' for 1st argument}}
f({(UR"(abc)")});
// since-cxx11-error at -1 {{call to deleted function 'f'}}
- // since-cxx11-note@#dr1467-f-char32-5 {{candidate function has been explicitly deleted}}
- // since-cxx11-note@#dr1467-f-char-4 {{candidate function not viable: no known conversion from 'const char32_t[4]' to 'const char' for 1st argument}}
- // since-cxx11-note@#dr1467-f-char-5 {{candidate function not viable: no known conversion from 'const char32_t[4]' to 'const char' for 1st argument}}
- // since-cxx11-note@#dr1467-f-wchar-4 {{candidate function not viable: no known conversion from 'const char32_t[4]' to 'const wchar_t' for 1st argument}}
- // since-cxx11-note@#dr1467-f-wchar-5 {{candidate function not viable: no known conversion from 'const char32_t[4]' to 'const wchar_t' for 1st argument}}
- // since-cxx11-note@#dr1467-f-char16-4 {{candidate function not viable: no known conversion from 'const char32_t[4]' to 'const char16_t' for 1st argument}}
- // since-cxx11-note@#dr1467-f-char16-5 {{candidate function not viable: no known conversion from 'const char32_t[4]' to 'const char16_t' for 1st argument}}
- // since-cxx11-note@#dr1467-f-char32-4 {{candidate function not viable: expects an rvalue for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char32-5 {{candidate function has been explicitly deleted}}
+ // since-cxx11-note@#cwg1467-f-char-4 {{candidate function not viable: no known conversion from 'const char32_t[4]' to 'const char' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char-5 {{candidate function not viable: no known conversion from 'const char32_t[4]' to 'const char' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-wchar-4 {{candidate function not viable: no known conversion from 'const char32_t[4]' to 'const wchar_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-wchar-5 {{candidate function not viable: no known conversion from 'const char32_t[4]' to 'const wchar_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char16-4 {{candidate function not viable: no known conversion from 'const char32_t[4]' to 'const char16_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char16-5 {{candidate function not viable: no known conversion from 'const char32_t[4]' to 'const char16_t' for 1st argument}}
+ // since-cxx11-note@#cwg1467-f-char32-4 {{candidate function not viable: expects an rvalue for 1st argument}}
}
} // namespace StringLiterals
#endif
-} // dr1467
+} // cwg1467
-namespace dr1479 { // dr1479: 3.1
+namespace cwg1479 { // cwg1479: 3.1
#if __cplusplus >= 201103L
int operator"" _a(const char*, std::size_t = 0);
// since-cxx11-error at -1 {{literal operator cannot have a default argument}}
#endif
}
-namespace dr1482 { // dr1482: 3.0
+namespace cwg1482 { // cwg1482: 3.0
// NB: sup 2516, test reused there
#if __cplusplus >= 201103L
template <typename T> struct S {
@@ -612,11 +612,11 @@ template <typename T> struct S {
enum E2 : S<E2>::I { e };
// since-cxx11-error at -1 {{use of undeclared identifier 'E2'}}
#endif
-} // namespace dr1482
+} // namespace cwg1482
-namespace dr1487 { // dr1487: 3.3
+namespace cwg1487 { // cwg1487: 3.3
#if __cplusplus >= 201103L
-struct A { // #dr1482-A
+struct A { // #cwg1482-A
struct B {
using A::A;
// since-cxx11-error at -1 {{using declaration refers into 'A::', which is not a base class of 'B'}}
@@ -624,7 +624,7 @@ struct A { // #dr1482-A
struct C : A {
// since-cxx11-error at -1 {{base class has incomplete type}}
- // since-cxx11-note@#dr1482-A {{definition of 'dr1487::A' is not complete until the closing '}'}}
+ // since-cxx11-note@#cwg1482-A {{definition of 'cwg1487::A' is not complete until the closing '}'}}
using A::A;
// since-cxx11-error at -1 {{using declaration refers into 'A::', which is not a base class of 'C'}}
};
@@ -636,9 +636,9 @@ struct D : A {
using A::A;
};
#endif
-} // namespace dr1487
+} // namespace cwg1487
-namespace dr1490 { // dr1490: 3.7 c++11
+namespace cwg1490 { // cwg1490: 3.7 c++11
#if __cplusplus >= 201103L
// List-initialization from a string literal
@@ -646,51 +646,51 @@ namespace dr1490 { // dr1490: 3.7 c++11
std::initializer_list<char>{"abc"};
// since-cxx11-error at -1 {{expected unqualified-id}}}
#endif
-} // dr1490
+} // cwg1490
-namespace dr1495 { // dr1495: 4
+namespace cwg1495 { // cwg1495: 4
#if __cplusplus >= 201103L
// Deduction succeeds in both directions.
- template<typename T, typename U> struct A {}; // #dr1495-A
+ template<typename T, typename U> struct A {}; // #cwg1495-A
template<typename T, typename U> struct A<U, T> {};
// since-cxx11-error at -1 {{class template partial specialization is not more specialized than the primary template}}
- // since-cxx11-note@#dr1495-A {{template is declared here}}
+ // since-cxx11-note@#cwg1495-A {{template is declared here}}
// Primary template is more specialized.
- template<typename, typename...> struct B {}; // #dr1495-B
+ template<typename, typename...> struct B {}; // #cwg1495-B
template<typename ...Ts> struct B<Ts...> {};
// since-cxx11-error at -1 {{class template partial specialization is not more specialized than the primary template}}
- // since-cxx11-note@#dr1495-B {{template is declared here}}
+ // since-cxx11-note@#cwg1495-B {{template is declared here}}
// Deduction fails in both directions.
- template<int, typename, typename ...> struct C {}; // #dr1495-C
+ template<int, typename, typename ...> struct C {}; // #cwg1495-C
template<typename ...Ts> struct C<0, Ts...> {};
// since-cxx11-error at -1 {{class template partial specialization is not more specialized than the primary template}}
- // since-cxx11-note@#dr1495-C {{template is declared here}}
+ // since-cxx11-note@#cwg1495-C {{template is declared here}}
#if __cplusplus >= 201402L
// Deduction succeeds in both directions.
- template<typename T, typename U> int a; // #dr1495-a
+ template<typename T, typename U> int a; // #cwg1495-a
template<typename T, typename U> int a<U, T>;
// since-cxx14-error at -1 {{variable template partial specialization is not more specialized than the primary template}}
- // since-cxx14-note@#dr1495-a {{template is declared here}}
+ // since-cxx14-note@#cwg1495-a {{template is declared here}}
// Primary template is more specialized.
- template<typename, typename...> int b; // #dr1495-b
+ template<typename, typename...> int b; // #cwg1495-b
template<typename ...Ts> int b<Ts...>;
// since-cxx14-error at -1 {{variable template partial specialization is not more specialized than the primary template}}
- // since-cxx14-note@#dr1495-b {{template is declared here}}
+ // since-cxx14-note@#cwg1495-b {{template is declared here}}
// Deduction fails in both directions.
- template<int, typename, typename ...> int c; // #dr1495-c
+ template<int, typename, typename ...> int c; // #cwg1495-c
template<typename ...Ts> int c<0, Ts...>;
// since-cxx14-error at -1 {{variable template partial specialization is not more specialized than the primary template}}
- // since-cxx14-note@#dr1495-c {{template is declared here}}
+ // since-cxx14-note@#cwg1495-c {{template is declared here}}
#endif
#endif
}
-namespace dr1496 { // dr1496: no
+namespace cwg1496 { // cwg1496: no
#if __cplusplus >= 201103L
struct A {
A() = delete;
diff --git a/clang/test/CXX/drs/dr15xx.cpp b/clang/test/CXX/drs/dr15xx.cpp
index 6e3ad41c748fb1..21a392a5141e3f 100644
--- a/clang/test/CXX/drs/dr15xx.cpp
+++ b/clang/test/CXX/drs/dr15xx.cpp
@@ -6,7 +6,7 @@
// RUN: %clang_cc1 -std=c++23 -triple x86_64-unknown-unknown %s -verify=expected,since-cxx23,since-cxx20,since-cxx11,since-cxx17 -fexceptions -fcxx-exceptions -pedantic-errors
// RUN: %clang_cc1 -std=c++2c -triple x86_64-unknown-unknown %s -verify=expected,since-cxx23,since-cxx20,since-cxx11,since-cxx17 -fexceptions -fcxx-exceptions -pedantic-errors
-namespace dr1512 { // dr1512: 4
+namespace cwg1512 { // cwg1512: 4
void f(char *p) {
if (p > 0) {}
// expected-error at -1 {{ordered comparison between pointer and zero ('char *' and 'int')}}
@@ -33,11 +33,11 @@ namespace dr1512 { // dr1512: 4
template<typename A, typename B, typename C> void composite_pointer_type_is_ord() {
composite_pointer_type_is_base<A, B, C>();
- typedef __typeof(val<A>() < val<B>()) cmp; // #dr1512-lt
- // since-cxx17-warning@#dr1512-lt {{ordered comparison of function pointers ('int (*)() noexcept' and 'int (*)()')}}
- // since-cxx17-note@#dr1512-noexcept-1st {{in instantiation of function template specialization 'dr1512::composite_pointer_type_is_ord<int (*)() noexcept, int (*)(), int (*)()>' requested here}}
- // since-cxx17-warning@#dr1512-lt {{ordered comparison of function pointers ('int (*)()' and 'int (*)() noexcept')}}
- // since-cxx17-note@#dr1512-noexcept-2nd {{in instantiation of function template specialization 'dr1512::composite_pointer_type_is_ord<int (*)(), int (*)() noexcept, int (*)()>' requested here}}
+ typedef __typeof(val<A>() < val<B>()) cmp; // #cwg1512-lt
+ // since-cxx17-warning@#cwg1512-lt {{ordered comparison of function pointers ('int (*)() noexcept' and 'int (*)()')}}
+ // since-cxx17-note@#cwg1512-noexcept-1st {{in instantiation of function template specialization 'cwg1512::composite_pointer_type_is_ord<int (*)() noexcept, int (*)(), int (*)()>' requested here}}
+ // since-cxx17-warning@#cwg1512-lt {{ordered comparison of function pointers ('int (*)()' and 'int (*)() noexcept')}}
+ // since-cxx17-note@#cwg1512-noexcept-2nd {{in instantiation of function template specialization 'cwg1512::composite_pointer_type_is_ord<int (*)(), int (*)() noexcept, int (*)()>' requested here}}
typedef __typeof(val<A>() <= val<B>()) cmp;
// since-cxx17-warning at -1 {{ordered comparison of function pointers ('int (*)() noexcept' and 'int (*)()')}}
// since-cxx17-warning at -2 {{ordered comparison of function pointers ('int (*)()' and 'int (*)() noexcept')}}
@@ -95,8 +95,8 @@ namespace dr1512 { // dr1512: 4
// since-cxx20-warning at -1 {{volatile-qualified return type 'volatile int' is deprecated}}
#if __cplusplus >= 201703L
- composite_pointer_type_is_ord<int (*)() noexcept, int (*)(), int (*)()>(); // #dr1512-noexcept-1st
- composite_pointer_type_is_ord<int (*)(), int (*)() noexcept, int (*)()>(); // #dr1512-noexcept-2nd
+ composite_pointer_type_is_ord<int (*)() noexcept, int (*)(), int (*)()>(); // #cwg1512-noexcept-1st
+ composite_pointer_type_is_ord<int (*)(), int (*)() noexcept, int (*)()>(); // #cwg1512-noexcept-2nd
composite_pointer_type_is_unord<int (A::*)() noexcept, int (A::*)(), int (A::*)()>();
composite_pointer_type_is_unord<int (A::*)(), int (A::*)() noexcept, int (A::*)()>();
// FIXME: This looks like a standard defect; these should probably all have type 'int (B::*)()'.
@@ -129,7 +129,7 @@ namespace dr1512 { // dr1512: 4
}
#if __cplusplus >= 201103L
- template<typename T> struct Wrap { operator T(); }; // #dr1512-Wrap
+ template<typename T> struct Wrap { operator T(); }; // #cwg1512-Wrap
void test_overload() {
using nullptr_t = decltype(nullptr);
void(Wrap<nullptr_t>() == Wrap<nullptr_t>());
@@ -143,75 +143,75 @@ namespace dr1512 { // dr1512: 4
void(Wrap<nullptr_t>() >= Wrap<nullptr_t>());
// since-cxx11-error at -1 {{invalid operands to binary expression ('Wrap<nullptr_t>' (aka 'Wrap<std::nullptr_t>') and 'Wrap<nullptr_t>' (aka 'Wrap<std::nullptr_t>'))}}
- // Under dr1213, this is ill-formed: we select the builtin operator<(int*, int*)
+ // Under cwg1213, this is ill-formed: we select the builtin operator<(int*, int*)
// but then only convert as far as 'nullptr_t', which we then can't convert to 'int*'.
void(Wrap<nullptr_t>() == Wrap<int*>());
void(Wrap<nullptr_t>() != Wrap<int*>());
void(Wrap<nullptr_t>() < Wrap<int*>());
// since-cxx11-error at -1 {{invalid operands to binary expression ('Wrap<nullptr_t>' (aka 'Wrap<std::nullptr_t>') and 'Wrap<int *>')}}
- // since-cxx11-note@#dr1512-Wrap {{first operand was implicitly converted to type 'std::nullptr_t'}}
- // since-cxx11-note@#dr1512-Wrap {{second operand was implicitly converted to type 'int *'}}
+ // since-cxx11-note@#cwg1512-Wrap {{first operand was implicitly converted to type 'std::nullptr_t'}}
+ // since-cxx11-note@#cwg1512-Wrap {{second operand was implicitly converted to type 'int *'}}
void(Wrap<nullptr_t>() > Wrap<int*>());
// since-cxx11-error at -1 {{invalid operands}}
- // since-cxx11-note@#dr1512-Wrap {{first operand was implicitly converted to type 'std::nullptr_t'}}
- // since-cxx11-note@#dr1512-Wrap{{second operand was implicitly converted to type 'int *'}}
+ // since-cxx11-note@#cwg1512-Wrap {{first operand was implicitly converted to type 'std::nullptr_t'}}
+ // since-cxx11-note@#cwg1512-Wrap{{second operand was implicitly converted to type 'int *'}}
void(Wrap<nullptr_t>() <= Wrap<int*>());
// since-cxx11-error at -1 {{invalid operands}}
- // since-cxx11-note@#dr1512-Wrap {{first operand was implicitly converted to type 'std::nullptr_t'}}
- // since-cxx11-note@#dr1512-Wrap {{second operand was implicitly converted to type 'int *'}}
+ // since-cxx11-note@#cwg1512-Wrap {{first operand was implicitly converted to type 'std::nullptr_t'}}
+ // since-cxx11-note@#cwg1512-Wrap {{second operand was implicitly converted to type 'int *'}}
void(Wrap<nullptr_t>() >= Wrap<int*>());
// since-cxx11-error at -1 {{invalid operands}}
- // since-cxx11-note@#dr1512-Wrap {{first operand was implicitly converted to type 'std::nullptr_t'}}
- // since-cxx11-note@#dr1512-Wrap {{second operand was implicitly converted to type 'int *'}}
+ // since-cxx11-note@#cwg1512-Wrap {{first operand was implicitly converted to type 'std::nullptr_t'}}
+ // since-cxx11-note@#cwg1512-Wrap {{second operand was implicitly converted to type 'int *'}}
}
#endif
}
-namespace dr1514 { // dr1514: 11
+namespace cwg1514 { // cwg1514: 11
#if __cplusplus >= 201103L
struct S {
- enum E : int {}; // #dr1514-E
+ enum E : int {}; // #cwg1514-E
enum E : int {};
// since-cxx11-error at -1 {{redefinition of 'E'}}
- // since-cxx11-note@#dr1514-E {{previous definition is here}}
+ // since-cxx11-note@#cwg1514-E {{previous definition is here}}
};
S::E se; // OK, complete type, not zero-width bitfield.
- // The behavior in other contexts is superseded by DR1966.
+ // The behavior in other contexts is superseded by CWG1966.
#endif
}
-namespace dr1518 { // dr1518: 4
+namespace cwg1518 { // cwg1518: 4
#if __cplusplus >= 201103L
-struct Z0 { // #dr1518-Z0
- explicit Z0() = default; // #dr1518-Z0-ctor
+struct Z0 { // #cwg1518-Z0
+ explicit Z0() = default; // #cwg1518-Z0-ctor
};
-struct Z { // #dr1518-Z
- explicit Z(); // #dr1518-Z-ctor
- explicit Z(int); // #dr1518-Z-int
- explicit Z(int, int); // #dr1518-Z-int-int
+struct Z { // #cwg1518-Z
+ explicit Z(); // #cwg1518-Z-ctor
+ explicit Z(int); // #cwg1518-Z-int
+ explicit Z(int, int); // #cwg1518-Z-int-int
};
-template <class T> int Eat(T); // #dr1518-Eat
+template <class T> int Eat(T); // #cwg1518-Eat
Z0 a;
Z0 b{};
Z0 c = {};
// since-cxx11-error at -1 {{chosen constructor is explicit in copy-initialization}}
-// since-cxx11-note@#dr1518-Z0-ctor {{explicit constructor declared here}}
+// since-cxx11-note@#cwg1518-Z0-ctor {{explicit constructor declared here}}
int i = Eat<Z0>({});
// since-cxx11-error at -1 {{no matching function for call to 'Eat'}}
-// since-cxx11-note@#dr1518-Eat {{candidate function template not viable: cannot convert initializer list argument to 'Z0'}}
+// since-cxx11-note@#cwg1518-Eat {{candidate function template not viable: cannot convert initializer list argument to 'Z0'}}
Z c2 = {};
// since-cxx11-error at -1 {{chosen constructor is explicit in copy-initialization}}
-// since-cxx11-note@#dr1518-Z-ctor {{explicit constructor declared here}}
+// since-cxx11-note@#cwg1518-Z-ctor {{explicit constructor declared here}}
int i2 = Eat<Z>({});
// since-cxx11-error at -1 {{no matching function for call to 'Eat'}}
-// since-cxx11-note@#dr1518-Eat {{candidate function template not viable: cannot convert initializer list argument to 'Z'}}
+// since-cxx11-note@#cwg1518-Eat {{candidate function template not viable: cannot convert initializer list argument to 'Z'}}
Z a1 = 1;
// since-cxx11-error at -1 {{no viable conversion from 'int' to 'Z'}}
-// since-cxx11-note@#dr1518-Z {{candidate constructor (the implicit copy constructor) not viable: no known conversion from 'int' to 'const Z &' for 1st argument}}
-// since-cxx11-note@#dr1518-Z {{candidate constructor (the implicit move constructor) not viable: no known conversion from 'int' to 'Z &&' for 1st argument}}
-// since-cxx11-note@#dr1518-Z-int {{explicit constructor is not a candidate}}
+// since-cxx11-note@#cwg1518-Z {{candidate constructor (the implicit copy constructor) not viable: no known conversion from 'int' to 'const Z &' for 1st argument}}
+// since-cxx11-note@#cwg1518-Z {{candidate constructor (the implicit move constructor) not viable: no known conversion from 'int' to 'Z &&' for 1st argument}}
+// since-cxx11-note@#cwg1518-Z-int {{explicit constructor is not a candidate}}
Z a3 = Z(1);
Z a2(1);
Z *p = new Z(1);
@@ -219,129 +219,129 @@ Z a4 = (Z)1;
Z a5 = static_cast<Z>(1);
Z a6 = {4, 3};
// since-cxx11-error at -1 {{chosen constructor is explicit in copy-initialization}}
-// since-cxx11-note@#dr1518-Z-int-int {{explicit constructor declared here}}
+// since-cxx11-note@#cwg1518-Z-int-int {{explicit constructor declared here}}
-struct UserProvidedBaseCtor { // #dr1518-U
+struct UserProvidedBaseCtor { // #cwg1518-U
UserProvidedBaseCtor() {}
};
-struct DoesntInheritCtor : UserProvidedBaseCtor { // #dr1518-D-U
+struct DoesntInheritCtor : UserProvidedBaseCtor { // #cwg1518-D-U
int x;
};
DoesntInheritCtor I{{}, 42};
// cxx11-14-error at -1 {{no matching constructor for initialization of 'DoesntInheritCtor'}}
-// cxx11-14-note@#dr1518-D-U {{candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided}}
-// cxx11-14-note@#dr1518-D-U {{candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 2 were provided}}
-// cxx11-14-note@#dr1518-D-U {{candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 2 were provided}}
+// cxx11-14-note@#cwg1518-D-U {{candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided}}
+// cxx11-14-note@#cwg1518-D-U {{candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 2 were provided}}
+// cxx11-14-note@#cwg1518-D-U {{candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 2 were provided}}
-struct BaseCtor { BaseCtor() = default; }; // #dr1518-BC
-struct InheritsCtor : BaseCtor { // #dr1518-I
- using BaseCtor::BaseCtor; // #dr1518-I-using
+struct BaseCtor { BaseCtor() = default; }; // #cwg1518-BC
+struct InheritsCtor : BaseCtor { // #cwg1518-I
+ using BaseCtor::BaseCtor; // #cwg1518-I-using
int x;
};
InheritsCtor II = {{}, 42};
// since-cxx11-error at -1 {{no matching constructor for initialization of 'InheritsCtor'}}
-// since-cxx11-note@#dr1518-BC {{candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided}}
-// since-cxx11-note@#dr1518-I-using {{constructor from base class 'BaseCtor' inherited here}}
-// since-cxx11-note@#dr1518-BC {{candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 2 were provided}}
-// since-cxx11-note@#dr1518-I-using {{constructor from base class 'BaseCtor' inherited here}}
-// since-cxx11-note@#dr1518-I {{candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided}}
-// since-cxx11-note@#dr1518-I {{candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 2 were provided}}
-// since-cxx11-note@#dr1518-I {{candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 2 were provided}}
+// since-cxx11-note@#cwg1518-BC {{candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided}}
+// since-cxx11-note@#cwg1518-I-using {{constructor from base class 'BaseCtor' inherited here}}
+// since-cxx11-note@#cwg1518-BC {{candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 2 were provided}}
+// since-cxx11-note@#cwg1518-I-using {{constructor from base class 'BaseCtor' inherited here}}
+// since-cxx11-note@#cwg1518-I {{candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided}}
+// since-cxx11-note@#cwg1518-I {{candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 2 were provided}}
+// since-cxx11-note@#cwg1518-I {{candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 2 were provided}}
namespace std_example {
struct A {
- explicit A() = default; // #dr1518-A
+ explicit A() = default; // #cwg1518-A
};
struct B : A {
- explicit B() = default; // #dr1518-B
+ explicit B() = default; // #cwg1518-B
};
struct C {
- explicit C(); // #dr1518-C
+ explicit C(); // #cwg1518-C
};
struct D : A {
C c;
- explicit D() = default; // #dr1518-D
+ explicit D() = default; // #cwg1518-D
};
template <typename T> void f() {
T t; // ok
T u{}; // ok
- T v = {}; // #dr1518-v
- // since-cxx11-error@#dr1518-v {{chosen constructor is explicit in copy-initialization}}
- // since-cxx11-note@#dr1518-f-A {{in instantiation of function template specialization 'dr1518::std_example::f<dr1518::std_example::A>' requested here}}
- // since-cxx11-note@#dr1518-A {{explicit constructor declared here}}
- // since-cxx11-error@#dr1518-v {{chosen constructor is explicit in copy-initialization}}
- // since-cxx11-note@#dr1518-f-B {{in instantiation of function template specialization 'dr1518::std_example::f<dr1518::std_example::B>' requested here}}
- // since-cxx11-note@#dr1518-B {{explicit constructor declared here}}
- // since-cxx11-error@#dr1518-v {{chosen constructor is explicit in copy-initialization}}
- // since-cxx11-note@#dr1518-f-C {{in instantiation of function template specialization 'dr1518::std_example::f<dr1518::std_example::C>' requested here}}
- // since-cxx11-note@#dr1518-C {{explicit constructor declared here}}
- // since-cxx11-error@#dr1518-v {{chosen constructor is explicit in copy-initialization}}
- // since-cxx11-note@#dr1518-f-D {{in instantiation of function template specialization 'dr1518::std_example::f<dr1518::std_example::D>' requested here}}
- // since-cxx11-note@#dr1518-D {{explicit constructor declared here}}
+ T v = {}; // #cwg1518-v
+ // since-cxx11-error@#cwg1518-v {{chosen constructor is explicit in copy-initialization}}
+ // since-cxx11-note@#cwg1518-f-A {{in instantiation of function template specialization 'cwg1518::std_example::f<cwg1518::std_example::A>' requested here}}
+ // since-cxx11-note@#cwg1518-A {{explicit constructor declared here}}
+ // since-cxx11-error@#cwg1518-v {{chosen constructor is explicit in copy-initialization}}
+ // since-cxx11-note@#cwg1518-f-B {{in instantiation of function template specialization 'cwg1518::std_example::f<cwg1518::std_example::B>' requested here}}
+ // since-cxx11-note@#cwg1518-B {{explicit constructor declared here}}
+ // since-cxx11-error@#cwg1518-v {{chosen constructor is explicit in copy-initialization}}
+ // since-cxx11-note@#cwg1518-f-C {{in instantiation of function template specialization 'cwg1518::std_example::f<cwg1518::std_example::C>' requested here}}
+ // since-cxx11-note@#cwg1518-C {{explicit constructor declared here}}
+ // since-cxx11-error@#cwg1518-v {{chosen constructor is explicit in copy-initialization}}
+ // since-cxx11-note@#cwg1518-f-D {{in instantiation of function template specialization 'cwg1518::std_example::f<cwg1518::std_example::D>' requested here}}
+ // since-cxx11-note@#cwg1518-D {{explicit constructor declared here}}
}
template <typename T> void g() {
- void x(T t); // #dr1518-x
- x({}); // #dr1518-x-call
- // since-cxx11-error@#dr1518-x-call {{chosen constructor is explicit in copy-initialization}}
- // since-cxx11-note@#dr1518-g-A {{in instantiation of function template specialization 'dr1518::std_example::g<dr1518::std_example::A>' requested here}}
- // since-cxx11-note@#dr1518-A {{explicit constructor declared here}}
- // since-cxx11-note@#dr1518-x {{passing argument to parameter 't' here}}
- // since-cxx11-error@#dr1518-x-call {{chosen constructor is explicit in copy-initialization}}
- // since-cxx11-note@#dr1518-g-B {{in instantiation of function template specialization 'dr1518::std_example::g<dr1518::std_example::B>' requested here}}
- // since-cxx11-note@#dr1518-B {{explicit constructor declared here}}
- // since-cxx11-note@#dr1518-x {{passing argument to parameter 't' here}}
- // since-cxx11-error@#dr1518-x-call {{chosen constructor is explicit in copy-initialization}}
- // since-cxx11-note@#dr1518-g-C {{in instantiation of function template specialization 'dr1518::std_example::g<dr1518::std_example::C>' requested here}}
- // since-cxx11-note@#dr1518-C {{explicit constructor declared here}}
- // since-cxx11-note@#dr1518-x {{passing argument to parameter 't' here}}
- // since-cxx11-error@#dr1518-x-call {{chosen constructor is explicit in copy-initialization}}
- // since-cxx11-note@#dr1518-g-D {{in instantiation of function template specialization 'dr1518::std_example::g<dr1518::std_example::D>' requested here}}
- // since-cxx11-note@#dr1518-D {{explicit constructor declared here}}
- // since-cxx11-note@#dr1518-x {{passing argument to parameter 't' here}}
+ void x(T t); // #cwg1518-x
+ x({}); // #cwg1518-x-call
+ // since-cxx11-error@#cwg1518-x-call {{chosen constructor is explicit in copy-initialization}}
+ // since-cxx11-note@#cwg1518-g-A {{in instantiation of function template specialization 'cwg1518::std_example::g<cwg1518::std_example::A>' requested here}}
+ // since-cxx11-note@#cwg1518-A {{explicit constructor declared here}}
+ // since-cxx11-note@#cwg1518-x {{passing argument to parameter 't' here}}
+ // since-cxx11-error@#cwg1518-x-call {{chosen constructor is explicit in copy-initialization}}
+ // since-cxx11-note@#cwg1518-g-B {{in instantiation of function template specialization 'cwg1518::std_example::g<cwg1518::std_example::B>' requested here}}
+ // since-cxx11-note@#cwg1518-B {{explicit constructor declared here}}
+ // since-cxx11-note@#cwg1518-x {{passing argument to parameter 't' here}}
+ // since-cxx11-error@#cwg1518-x-call {{chosen constructor is explicit in copy-initialization}}
+ // since-cxx11-note@#cwg1518-g-C {{in instantiation of function template specialization 'cwg1518::std_example::g<cwg1518::std_example::C>' requested here}}
+ // since-cxx11-note@#cwg1518-C {{explicit constructor declared here}}
+ // since-cxx11-note@#cwg1518-x {{passing argument to parameter 't' here}}
+ // since-cxx11-error@#cwg1518-x-call {{chosen constructor is explicit in copy-initialization}}
+ // since-cxx11-note@#cwg1518-g-D {{in instantiation of function template specialization 'cwg1518::std_example::g<cwg1518::std_example::D>' requested here}}
+ // since-cxx11-note@#cwg1518-D {{explicit constructor declared here}}
+ // since-cxx11-note@#cwg1518-x {{passing argument to parameter 't' here}}
}
void test() {
- f<A>(); // #dr1518-f-A
- f<B>(); // #dr1518-f-B
- f<C>(); // #dr1518-f-C
- f<D>(); // #dr1518-f-D
- g<A>(); // #dr1518-g-A
- g<B>(); // #dr1518-g-B
- g<C>(); // #dr1518-g-C
- g<D>(); // #dr1518-g-D
+ f<A>(); // #cwg1518-f-A
+ f<B>(); // #cwg1518-f-B
+ f<C>(); // #cwg1518-f-C
+ f<D>(); // #cwg1518-f-D
+ g<A>(); // #cwg1518-g-A
+ g<B>(); // #cwg1518-g-B
+ g<C>(); // #cwg1518-g-C
+ g<D>(); // #cwg1518-g-D
}
}
#endif // __cplusplus >= 201103L
}
-namespace dr1550 { // dr1550: 3.4
+namespace cwg1550 { // cwg1550: 3.4
int f(bool b, int n) {
return (b ? (throw 0) : n) + (b ? n : (throw 0));
}
}
-namespace dr1558 { // dr1558: 12
+namespace cwg1558 { // cwg1558: 12
#if __cplusplus >= 201103L
template<class T, class...> using first_of = T;
- template<class T> first_of<void, typename T::type> f(int); // #dr1558-f
- template<class T> void f(...) = delete; // #dr1558-f-deleted
+ template<class T> first_of<void, typename T::type> f(int); // #cwg1558-f
+ template<class T> void f(...) = delete; // #cwg1558-f-deleted
struct X { typedef void type; };
void test() {
f<X>(0);
f<int>(0);
// since-cxx11-error at -1 {{call to deleted function 'f'}}
- // since-cxx11-note@#dr1558-f-deleted {{candidate function [with T = int] has been explicitly deleted}}
- // since-cxx11-note@#dr1558-f {{candidate template ignored: substitution failure [with T = int]: type 'int' cannot be used prior to '::' because it has no members}}
+ // since-cxx11-note@#cwg1558-f-deleted {{candidate function [with T = int] has been explicitly deleted}}
+ // since-cxx11-note@#cwg1558-f {{candidate template ignored: substitution failure [with T = int]: type 'int' cannot be used prior to '::' because it has no members}}
}
#endif
}
-namespace dr1560 { // dr1560: 3.5
+namespace cwg1560 { // cwg1560: 3.5
void f(bool b, int n) {
(b ? throw 0 : n) = (b ? n : throw 0) = 0;
}
@@ -350,7 +350,7 @@ namespace dr1560 { // dr1560: 3.5
const X &x = true ? get() : throw 0;
}
-namespace dr1563 { // dr1563: yes
+namespace cwg1563 { // cwg1563: yes
#if __cplusplus >= 201103L
double bar(double) { return 0.0; }
float bar(float) { return 0.0f; }
@@ -360,7 +360,7 @@ namespace dr1563 { // dr1563: yes
#endif
}
-namespace dr1567 { // dr1567: 3.3
+namespace cwg1567 { // cwg1567: 3.3
#if __cplusplus >= 201103L
struct B;
struct A {
@@ -368,12 +368,12 @@ struct A {
A(const B&) = delete;
A(A&&);
A(B&&) = delete;
- A(int); // #dr1567-A-int
+ A(int); // #cwg1567-A-int
};
-struct B: A { // #dr1567-B
- using A::A; // #dr1567-using-A
- B(double); // #dr1567-B-double
+struct B: A { // #cwg1567-B
+ using A::A; // #cwg1567-using-A
+ B(double); // #cwg1567-B-double
};
A a{0};
@@ -384,22 +384,22 @@ B b3{B{1.0}};
// Good, copy/move ctors are not inherited
B b4{a};
// since-cxx11-error at -1 {{no matching constructor for initialization of 'B'}}
-// since-cxx11-note@#dr1567-A-int {{candidate inherited constructor not viable: no known conversion from 'A' to 'int' for 1st argument}}
-// since-cxx11-note@#dr1567-using-A {{constructor from base class 'A' inherited here}}
-// since-cxx11-note@#dr1567-B {{candidate constructor (the implicit copy constructor) not viable: no known conversion from 'A' to 'const B' for 1st argument}}
-// since-cxx11-note@#dr1567-B {{candidate constructor (the implicit move constructor) not viable: no known conversion from 'A' to 'B' for 1st argument}}
-// since-cxx11-note@#dr1567-B-double {{candidate constructor not viable: no known conversion from 'A' to 'double' for 1st argument}}
+// since-cxx11-note@#cwg1567-A-int {{candidate inherited constructor not viable: no known conversion from 'A' to 'int' for 1st argument}}
+// since-cxx11-note@#cwg1567-using-A {{constructor from base class 'A' inherited here}}
+// since-cxx11-note@#cwg1567-B {{candidate constructor (the implicit copy constructor) not viable: no known conversion from 'A' to 'const B' for 1st argument}}
+// since-cxx11-note@#cwg1567-B {{candidate constructor (the implicit move constructor) not viable: no known conversion from 'A' to 'B' for 1st argument}}
+// since-cxx11-note@#cwg1567-B-double {{candidate constructor not viable: no known conversion from 'A' to 'double' for 1st argument}}
B b5{A{0}};
// since-cxx11-error at -1 {{no matching constructor for initialization of 'B'}}
-// since-cxx11-note@#dr1567-A-int {{candidate inherited constructor not viable: no known conversion from 'A' to 'int' for 1st argument}}
-// since-cxx11-note@#dr1567-using-A {{constructor from base class 'A' inherited here}}
-// since-cxx11-note@#dr1567-B {{candidate constructor (the implicit copy constructor) not viable: no known conversion from 'A' to 'const B' for 1st argument}}
-// since-cxx11-note@#dr1567-B {{candidate constructor (the implicit move constructor) not viable: no known conversion from 'A' to 'B' for 1st argument}}
-// since-cxx11-note@#dr1567-B-double {{candidate constructor not viable: no known conversion from 'A' to 'double' for 1st argument}}
+// since-cxx11-note@#cwg1567-A-int {{candidate inherited constructor not viable: no known conversion from 'A' to 'int' for 1st argument}}
+// since-cxx11-note@#cwg1567-using-A {{constructor from base class 'A' inherited here}}
+// since-cxx11-note@#cwg1567-B {{candidate constructor (the implicit copy constructor) not viable: no known conversion from 'A' to 'const B' for 1st argument}}
+// since-cxx11-note@#cwg1567-B {{candidate constructor (the implicit move constructor) not viable: no known conversion from 'A' to 'B' for 1st argument}}
+// since-cxx11-note@#cwg1567-B-double {{candidate constructor not viable: no known conversion from 'A' to 'double' for 1st argument}}
#endif
}
-namespace dr1573 { // dr1573: 3.9
+namespace cwg1573 { // cwg1573: 3.9
#if __cplusplus >= 201103L
// ellipsis is inherited (p0136r1 supersedes this part).
struct A { A(); A(int, char, ...); };
@@ -407,38 +407,38 @@ namespace dr1573 { // dr1573: 3.9
B b(1, 'x', 4.0, "hello"); // ok
// inherited constructor is effectively constexpr if the user-written constructor would be
- struct C { C(); constexpr C(int) {} }; // #dr1573-C
+ struct C { C(); constexpr C(int) {} }; // #cwg1573-C
struct D : C { using C::C; };
constexpr D d = D(0); // ok
- struct E : C { using C::C; A a; }; // #dr1573-E
+ struct E : C { using C::C; A a; }; // #cwg1573-E
constexpr E e = E(0);
// since-cxx11-error at -1 {{constexpr variable cannot have non-literal type 'const E'}}
- // since-cxx11-note@#dr1573-E {{'E' is not literal because it has data member 'a' of non-literal type 'A'}}
+ // since-cxx11-note@#cwg1573-E {{'E' is not literal because it has data member 'a' of non-literal type 'A'}}
// FIXME: This diagnostic is pretty bad; we should explain that the problem
// is that F::c would be initialized by a non-constexpr constructor.
- struct F : C { using C::C; C c; }; // #dr1573-F
+ struct F : C { using C::C; C c; }; // #cwg1573-F
constexpr F f = F(0);
// since-cxx11-error at -1 {{constexpr variable 'f' must be initialized by a constant expression}}
// cxx11-20-note at -2 {{constructor inherited from base class 'C' cannot be used in a constant expression; derived class cannot be implicitly initialized}}
// since-cxx23-note at -3 {{in implicit initialization for inherited constructor of 'F'}}
- // since-cxx23-note@#dr1573-F {{non-constexpr constructor 'C' cannot be used in a constant expression}}
- // cxx11-20-note@#dr1573-F {{declared here}}
- // since-cxx23-note@#dr1573-C {{declared here}}
+ // since-cxx23-note@#cwg1573-F {{non-constexpr constructor 'C' cannot be used in a constant expression}}
+ // cxx11-20-note@#cwg1573-F {{declared here}}
+ // since-cxx23-note@#cwg1573-C {{declared here}}
// inherited constructor is effectively deleted if the user-written constructor would be
struct G { G(int); };
- struct H : G { using G::G; G g; }; // #dr1573-H
+ struct H : G { using G::G; G g; }; // #cwg1573-H
H h(0);
// since-cxx11-error at -1 {{constructor inherited by 'H' from base class 'G' is implicitly deleted}}
- // since-cxx11-note@#dr1573-H {{constructor inherited by 'H' is implicitly deleted because field 'g' has no default constructor}}
+ // since-cxx11-note@#cwg1573-H {{constructor inherited by 'H' is implicitly deleted because field 'g' has no default constructor}}
// deleted definition of constructor is inherited
- struct I { I(int) = delete; }; // #dr1573-I
+ struct I { I(int) = delete; }; // #cwg1573-I
struct J : I { using I::I; };
J j(0);
// since-cxx11-error at -1 {{call to deleted constructor of 'J'}}
- // since-cxx11-note@#dr1573-I {{'I' has been explicitly marked deleted here}}
+ // since-cxx11-note@#cwg1573-I {{'I' has been explicitly marked deleted here}}
#endif
}
@@ -483,18 +483,18 @@ namespace std {
} // std
#endif
-namespace dr1579 { // dr1579: 3.9
+namespace cwg1579 { // cwg1579: 3.9
#if __cplusplus >= 201103L
template<class T>
struct GenericMoveOnly {
GenericMoveOnly();
- template<class U> GenericMoveOnly(const GenericMoveOnly<U> &) = delete; // #dr1579-deleted-U
- GenericMoveOnly(const int &) = delete; // #dr1579-deleted-int
+ template<class U> GenericMoveOnly(const GenericMoveOnly<U> &) = delete; // #cwg1579-deleted-U
+ GenericMoveOnly(const int &) = delete; // #cwg1579-deleted-int
template<class U> GenericMoveOnly(GenericMoveOnly<U> &&);
GenericMoveOnly(int &&);
};
-GenericMoveOnly<float> DR1579_Eligible(GenericMoveOnly<char> CharMO) {
+GenericMoveOnly<float> CWG1579_Eligible(GenericMoveOnly<char> CharMO) {
int i;
GenericMoveOnly<char> GMO;
@@ -510,7 +510,7 @@ GenericMoveOnly<float> DR1579_Eligible(GenericMoveOnly<char> CharMO) {
GenericMoveOnly<char> GlobalMO;
-GenericMoveOnly<float> DR1579_Ineligible(int &AnInt,
+GenericMoveOnly<float> CWG1579_Ineligible(int &AnInt,
GenericMoveOnly<char> &CharMO) {
static GenericMoveOnly<char> StaticMove;
extern GenericMoveOnly<char> ExternMove;
@@ -518,63 +518,63 @@ GenericMoveOnly<float> DR1579_Ineligible(int &AnInt,
if (0)
return AnInt;
// since-cxx11-error at -1 {{conversion function from 'int' to 'GenericMoveOnly<float>' invokes a deleted function}}
- // since-cxx11-note@#dr1579-deleted-int {{'GenericMoveOnly' has been explicitly marked deleted here}}
+ // since-cxx11-note@#cwg1579-deleted-int {{'GenericMoveOnly' has been explicitly marked deleted here}}
else if (0)
return GlobalMO;
// since-cxx11-error at -1 {{conversion function from 'GenericMoveOnly<char>' to 'GenericMoveOnly<float>' invokes a deleted function}}
- // since-cxx11-note@#dr1579-deleted-U {{'GenericMoveOnly<char>' has been explicitly marked deleted here}}
+ // since-cxx11-note@#cwg1579-deleted-U {{'GenericMoveOnly<char>' has been explicitly marked deleted here}}
else if (0)
return StaticMove;
// since-cxx11-error at -1 {{conversion function from 'GenericMoveOnly<char>' to 'GenericMoveOnly<float>' invokes a deleted function}}
- // since-cxx11-note@#dr1579-deleted-U {{'GenericMoveOnly<char>' has been explicitly marked deleted here}}
+ // since-cxx11-note@#cwg1579-deleted-U {{'GenericMoveOnly<char>' has been explicitly marked deleted here}}
else if (0)
return ExternMove;
// since-cxx11-error at -1 {{conversion function from 'GenericMoveOnly<char>' to 'GenericMoveOnly<float>' invokes a deleted function}}
- // since-cxx11-note@#dr1579-deleted-U {{'GenericMoveOnly<char>' has been explicitly marked deleted here}}
+ // since-cxx11-note@#cwg1579-deleted-U {{'GenericMoveOnly<char>' has been explicitly marked deleted here}}
else if (0)
return AnInt;
// since-cxx11-error at -1 {{conversion function from 'int' to 'GenericMoveOnly<float>' invokes a deleted function}}
- // since-cxx11-note@#dr1579-deleted-int {{'GenericMoveOnly' has been explicitly marked deleted here}}
+ // since-cxx11-note@#cwg1579-deleted-int {{'GenericMoveOnly' has been explicitly marked deleted here}}
else
return CharMO;
// since-cxx11-error at -1 {{conversion function from 'GenericMoveOnly<char>' to 'GenericMoveOnly<float>' invokes a deleted function}}
- // since-cxx11-note@#dr1579-deleted-U {{'GenericMoveOnly<char>' has been explicitly marked deleted here}}
+ // since-cxx11-note@#cwg1579-deleted-U {{'GenericMoveOnly<char>' has been explicitly marked deleted here}}
}
-auto DR1579_lambda_valid = [](GenericMoveOnly<float> mo) ->
+auto CWG1579_lambda_valid = [](GenericMoveOnly<float> mo) ->
GenericMoveOnly<char> {
return mo;
};
-auto DR1579_lambda_invalid = []() -> GenericMoveOnly<char> {
+auto CWG1579_lambda_invalid = []() -> GenericMoveOnly<char> {
static GenericMoveOnly<float> mo;
return mo;
// since-cxx11-error at -1 {{conversion function from 'GenericMoveOnly<float>' to 'GenericMoveOnly<char>' invokes a deleted function}}
- // since-cxx11-note@#dr1579-deleted-U {{'GenericMoveOnly<float>' has been explicitly marked deleted here}}
+ // since-cxx11-note@#cwg1579-deleted-U {{'GenericMoveOnly<float>' has been explicitly marked deleted here}}
};
#endif
-} // end namespace dr1579
+} // end namespace cwg1579
-namespace dr1584 { // dr1584: 7 drafting 2015-05
+namespace cwg1584 { // cwg1584: 7 drafting 2015-05
#if __cplusplus >= 201103L
// Deducing function types from cv-qualified types
- template<typename T> void f(const T *); // #dr1584-f
+ template<typename T> void f(const T *); // #cwg1584-f
template<typename T> void g(T *, const T * = 0);
template<typename T> void h(T *) { T::error; }
// since-cxx11-error at -1 {{type 'void ()' cannot be used prior to '::' because it has no members}}
- // since-cxx11-note@#dr1584-h {{in instantiation of function template specialization 'dr1584::h<void ()>' requested here}}
+ // since-cxx11-note@#cwg1584-h {{in instantiation of function template specialization 'cwg1584::h<void ()>' requested here}}
template<typename T> void h(const T *);
void i() {
f(&i);
// since-cxx11-error at -1 {{no matching function for call to 'f'}}
- // since-cxx11-note@#dr1584-f {{candidate template ignored: could not match 'const T *' against 'void (*)()'}}
+ // since-cxx11-note@#cwg1584-f {{candidate template ignored: could not match 'const T *' against 'void (*)()'}}
g(&i);
- h(&i); // #dr1584-h
+ h(&i); // #cwg1584-h
}
#endif
}
-namespace dr1589 { // dr1589: 3.7 c++11
+namespace cwg1589 { // cwg1589: 3.7 c++11
#if __cplusplus >= 201103L
// Ambiguous ranking of list-initialization sequences
@@ -595,33 +595,33 @@ namespace dr1589 { // dr1589: 3.7 c++11
namespace with_error {
void f0(long);
- void f0(std::initializer_list<int>); // #dr1589-f0-ilist
- void f0(std::initializer_list<int>, int = 0); // #dr1589-f0-ilist-int
+ void f0(std::initializer_list<int>); // #cwg1589-f0-ilist
+ void f0(std::initializer_list<int>, int = 0); // #cwg1589-f0-ilist-int
void g0() { f0({1L}); }
// since-cxx11-error at -1 {{call to 'f0' is ambiguous}}
- // since-cxx11-note@#dr1589-f0-ilist {{candidate function}}
- // since-cxx11-note@#dr1589-f0-ilist-int {{candidate function}}
+ // since-cxx11-note@#cwg1589-f0-ilist {{candidate function}}
+ // since-cxx11-note@#cwg1589-f0-ilist-int {{candidate function}}
void f1(int);
- void f1(std::initializer_list<long>); // #dr1589-f1-ilist
- void f1(std::initializer_list<long>, int = 0); // #dr1589-f1-ilist-long
+ void f1(std::initializer_list<long>); // #cwg1589-f1-ilist
+ void f1(std::initializer_list<long>, int = 0); // #cwg1589-f1-ilist-long
void g1() { f1({42}); }
// since-cxx11-error at -1 {{call to 'f1' is ambiguous}}
- // since-cxx11-note@#dr1589-f1-ilist {{candidate function}}
- // since-cxx11-note@#dr1589-f1-ilist-long {{candidate function}}
+ // since-cxx11-note@#cwg1589-f1-ilist {{candidate function}}
+ // since-cxx11-note@#cwg1589-f1-ilist-long {{candidate function}}
void f2(std::pair<const char*, const char*>);
- void f2(std::initializer_list<std::string>); // #dr1589-f2-ilist
- void f2(std::initializer_list<std::string>, int = 0); // #dr1589-f2-ilist-int
+ void f2(std::initializer_list<std::string>); // #cwg1589-f2-ilist
+ void f2(std::initializer_list<std::string>, int = 0); // #cwg1589-f2-ilist-int
void g2() { f2({"foo","bar"}); }
// since-cxx11-error at -1 {{call to 'f2' is ambiguous}}
- // since-cxx11-note@#dr1589-f2-ilist {{candidate function}}
- // since-cxx11-note@#dr1589-f2-ilist-int {{candidate function}}
+ // since-cxx11-note@#cwg1589-f2-ilist {{candidate function}}
+ // since-cxx11-note@#cwg1589-f2-ilist-int {{candidate function}}
}
#endif
-} // dr1589
+} // cwg1589
-namespace dr1591 { //dr1591. Deducing array bound and element type from initializer list
+namespace cwg1591 { //cwg1591. Deducing array bound and element type from initializer list
#if __cplusplus >= 201103L
template<class T, int N> int h(T const(&)[N]);
int X = h({1,2,3}); // T deduced to int, N deduced to 3
@@ -630,10 +630,10 @@ namespace dr1591 { //dr1591. Deducing array bound and element type from initial
int Y = j({42}); // T deduced to int, array bound not considered
struct Aggr { int i; int j; };
- template<int N> int k(Aggr const(&)[N]); // #dr1591-k
+ template<int N> int k(Aggr const(&)[N]); // #cwg1591-k
int Y0 = k({1,2,3});
// since-cxx11-error at -1 {{no matching function for call to 'k'}}
- // since-cxx11-note@#dr1591-k {{candidate function [with N = 3] not viable: no known conversion from 'int' to 'const Aggr' for 1st argument}}
+ // since-cxx11-note@#cwg1591-k {{candidate function [with N = 3] not viable: no known conversion from 'int' to 'const Aggr' for 1st argument}}
int Z = k({{1},{2},{3}}); // OK, N deduced to 3
template<int M, int N> int m(int const(&)[M][N]);
@@ -644,31 +644,31 @@ namespace dr1591 { //dr1591. Deducing array bound and element type from initial
namespace check_multi_dim_arrays {
- template<class T, int N, int M, int O> int ***f(const T (&a)[N][M][O]); // #dr1591-f-3
- template<class T, int N, int M> int **f(const T (&a)[N][M]); // #dr1591-f-2
+ template<class T, int N, int M, int O> int ***f(const T (&a)[N][M][O]); // #cwg1591-f-3
+ template<class T, int N, int M> int **f(const T (&a)[N][M]); // #cwg1591-f-2
- template<class T, int N> int *f(const T (&a)[N]); // #dr1591-f-1
+ template<class T, int N> int *f(const T (&a)[N]); // #cwg1591-f-1
int ***p3 = f({ { {1,2}, {3, 4} }, { {5,6}, {7, 8} }, { {9,10}, {11, 12} } });
int ***p33 = f({ { {1,2}, {3, 4} }, { {5,6}, {7, 8} }, { {9,10}, {11, 12, 13} } });
// since-cxx11-error at -1 {{no matching function for call to 'f'}}
- // since-cxx11-note@#dr1591-f-2 {{candidate template ignored: couldn't infer template argument 'T'}}
- // since-cxx11-note@#dr1591-f-1 {{candidate template ignored: couldn't infer template argument 'T'}}
- // since-cxx11-note@#dr1591-f-3 {{candidate template ignored: deduced conflicting values for parameter 'O' (2 vs. 3)}}
+ // since-cxx11-note@#cwg1591-f-2 {{candidate template ignored: couldn't infer template argument 'T'}}
+ // since-cxx11-note@#cwg1591-f-1 {{candidate template ignored: couldn't infer template argument 'T'}}
+ // since-cxx11-note@#cwg1591-f-3 {{candidate template ignored: deduced conflicting values for parameter 'O' (2 vs. 3)}}
int **p2 = f({ {1,2,3}, {3, 4, 5} });
int **p22 = f({ {1,2}, {3, 4} });
int *p1 = f({1, 2, 3});
}
namespace check_multi_dim_arrays_rref {
- template<class T, int N, int M, int O> int ***g(T (&&a)[N][M][O]); // #dr1591-g-3
- template<class T, int N, int M> int **g(T (&&a)[N][M]); // #dr1591-g-2
+ template<class T, int N, int M, int O> int ***g(T (&&a)[N][M][O]); // #cwg1591-g-3
+ template<class T, int N, int M> int **g(T (&&a)[N][M]); // #cwg1591-g-2
- template<class T, int N> int *g(T (&&a)[N]); // #dr1591-g-1
+ template<class T, int N> int *g(T (&&a)[N]); // #cwg1591-g-1
int ***p3 = g({ { {1,2}, {3, 4} }, { {5,6}, {7, 8} }, { {9,10}, {11, 12} } });
int ***p33 = g({ { {1,2}, {3, 4} }, { {5,6}, {7, 8} }, { {9,10}, {11, 12, 13} } });
// since-cxx11-error at -1 {{no matching function for call to 'g'}}
- // since-cxx11-note@#dr1591-g-2 {{candidate template ignored: couldn't infer template argument 'T'}}
- // since-cxx11-note@#dr1591-g-1 {{candidate template ignored: couldn't infer template argument 'T'}}
- // since-cxx11-note@#dr1591-g-3 {{candidate template ignored: deduced conflicting values for parameter 'O' (2 vs. 3)}}
+ // since-cxx11-note@#cwg1591-g-2 {{candidate template ignored: couldn't infer template argument 'T'}}
+ // since-cxx11-note@#cwg1591-g-1 {{candidate template ignored: couldn't infer template argument 'T'}}
+ // since-cxx11-note@#cwg1591-g-3 {{candidate template ignored: deduced conflicting values for parameter 'O' (2 vs. 3)}}
int **p2 = g({ {1,2,3}, {3, 4, 5} });
int **p22 = g({ {1,2}, {3, 4} });
int *p1 = g({1, 2, 3});
@@ -684,8 +684,8 @@ namespace dr1591 { //dr1591. Deducing array bound and element type from initial
template<class T, int N> int *i(T (&&)[N]); // #1
template<class T> char *i(std::initializer_list<T> &&); // #2
- template<class T, int N, int M> int **i(T (&&)[N][M]); // #3 #dr1591-i-2
- template<class T, int N> char **i(std::initializer_list<T> (&&)[N]); // #4 #dr1591-i-1
+ template<class T, int N, int M> int **i(T (&&)[N][M]); // #3 #cwg1591-i-2
+ template<class T, int N> char **i(std::initializer_list<T> (&&)[N]); // #4 #cwg1591-i-1
template<class T> short *i(T (&&)[2]); // #5
@@ -697,11 +697,11 @@ namespace dr1591 { //dr1591. Deducing array bound and element type from initial
void *pv1 = i({ {1, 2, 3}, {4, 5, 6} }); // ambiguous btw 3 & 4
// since-cxx11-error at -1 {{call to 'i' is ambiguous}}
- // since-cxx11-note@#dr1591-i-2 {{candidate function [with T = int, N = 2, M = 3]}}
- // since-cxx11-note@#dr1591-i-1 {{candidate function [with T = int, N = 2]}}
+ // since-cxx11-note@#cwg1591-i-2 {{candidate function [with T = int, N = 2, M = 3]}}
+ // since-cxx11-note@#cwg1591-i-1 {{candidate function [with T = int, N = 2]}}
char **pcc = i({ {1}, {2, 3} }); // OK #4
short *ps = i(Arr<int>{1, 2}); // OK #5
}
#endif
-} // dr1591
+} // cwg1591
diff --git a/clang/test/CXX/drs/dr16xx.cpp b/clang/test/CXX/drs/dr16xx.cpp
index f4d6c04fb8e073..6d7bb7619f8b8b 100644
--- a/clang/test/CXX/drs/dr16xx.cpp
+++ b/clang/test/CXX/drs/dr16xx.cpp
@@ -25,7 +25,7 @@ namespace std {
} // std
#endif
-namespace dr1601 { // dr1601: 10
+namespace cwg1601 { // cwg1601: 10
enum E : char { e };
// cxx98-error at -1 {{enumeration types with a fixed underlying type are a C++11 extension}}
void f(char);
@@ -33,9 +33,9 @@ void f(int);
void g() {
f(e);
}
-} // namespace dr1601
+} // namespace cwg1601
-namespace dr1606 { // dr1606: 3.1
+namespace cwg1606 { // cwg1606: 3.1
#if __cplusplus >= 201103L
std::size_t test() {
int i = 1;
@@ -44,16 +44,16 @@ namespace dr1606 { // dr1606: 3.1
return sizeof(f);
}
#endif
-} // namespace dr1606
+} // namespace cwg1606
-namespace dr1611 { // dr1611: dup 1658
+namespace cwg1611 { // cwg1611: dup 1658
struct A { A(int); };
struct B : virtual A { virtual void f() = 0; };
struct C : B { C() : A(0) {} void f(); };
C c;
}
-namespace dr1631 { // dr1631: 3.7
+namespace cwg1631 { // cwg1631: 3.7
#if __cplusplus >= 201103L
// Incorrect overload resolution for single-element initializer-list
@@ -70,24 +70,24 @@ namespace dr1631 { // dr1631: 3.7
namespace with_error {
void f(B, int); // TODO: expected- note {{candidate function}}
- void f(int, A); // #dr1631-f
- void f(int, A, int = 0); // #dr1631-f-int
+ void f(int, A); // #cwg1631-f
+ void f(int, A, int = 0); // #cwg1631-f-int
void test() {
f({0}, {{1}});
// since-cxx11-error at -1 {{call to 'f' is ambiguous}}
- // since-cxx11-note@#dr1631-f {{candidate function}}
- // since-cxx11-note@#dr1631-f-int {{candidate function}}
+ // since-cxx11-note@#cwg1631-f {{candidate function}}
+ // since-cxx11-note@#cwg1631-f-int {{candidate function}}
}
}
#endif
}
-namespace dr1638 { // dr1638: 3.1
+namespace cwg1638 { // cwg1638: 3.1
#if __cplusplus >= 201103L
template<typename T> struct A {
- enum class E; // #dr1638-E
- enum class F : T; // #dr1638-F
+ enum class E; // #cwg1638-E
+ enum class F : T; // #cwg1638-F
};
template<> enum class A<int>::E;
@@ -100,13 +100,13 @@ namespace dr1638 { // dr1638: 3.1
template<> enum class A<short>::F;
// since-cxx11-error at -1 {{enumeration redeclared with
diff erent underlying type 'int' (was 'short')}}
- // since-cxx11-note@#dr1638-F {{previous declaration is here}}
+ // since-cxx11-note@#cwg1638-F {{previous declaration is here}}
template<> enum class A<char>::E : char;
// since-cxx11-error at -1 {{enumeration redeclared with
diff erent underlying type 'char' (was 'int')}}
- // since-cxx11-note@#dr1638-E {{previous declaration is here}}
+ // since-cxx11-note@#cwg1638-E {{previous declaration is here}}
template<> enum class A<char>::F : int;
// since-cxx11-error at -1 {{enumeration redeclared with
diff erent underlying type 'int' (was 'char')}}
- // since-cxx11-note@#dr1638-F {{previous declaration is here}}
+ // since-cxx11-note@#cwg1638-F {{previous declaration is here}}
enum class A<unsigned>::E;
// since-cxx11-error at -1 {{template specialization requires 'template<>'}}
@@ -124,34 +124,34 @@ namespace dr1638 { // dr1638: 3.1
#endif
}
-namespace dr1645 { // dr1645: 3.9
+namespace cwg1645 { // cwg1645: 3.9
#if __cplusplus >= 201103L
struct A {
- constexpr A(int, float = 0); // #dr1645-int-float
- explicit A(int, int = 0); // #dr1645-int-int
- A(int, int, int = 0) = delete; // #dr1645-int-int-int
+ constexpr A(int, float = 0); // #cwg1645-int-float
+ explicit A(int, int = 0); // #cwg1645-int-int
+ A(int, int, int = 0) = delete; // #cwg1645-int-int-int
};
struct B : A {
- using A::A; // #dr1645-using
+ using A::A; // #cwg1645-using
};
constexpr B a(0);
// since-cxx11-error at -1 {{call to constructor of 'const B' is ambiguous}}
- // since-cxx11-note@#dr1645-int-float {{candidate inherited constructor}}
- // since-cxx11-note@#dr1645-using {{constructor from base class 'A' inherited here}}
- // since-cxx11-note@#dr1645-int-int {{candidate inherited constructor}}
- // since-cxx11-note@#dr1645-using {{constructor from base class 'A' inherited here}}
+ // since-cxx11-note@#cwg1645-int-float {{candidate inherited constructor}}
+ // since-cxx11-note@#cwg1645-using {{constructor from base class 'A' inherited here}}
+ // since-cxx11-note@#cwg1645-int-int {{candidate inherited constructor}}
+ // since-cxx11-note@#cwg1645-using {{constructor from base class 'A' inherited here}}
constexpr B b(0, 0);
// since-cxx11-error at -1 {{call to constructor of 'const B' is ambiguous}}
- // since-cxx11-note@#dr1645-int-int {{candidate inherited constructor}}
- // since-cxx11-note@#dr1645-using {{constructor from base class 'A' inherited here}}
- // since-cxx11-note@#dr1645-int-int-int {{candidate inherited constructor has been explicitly deleted}}
- // since-cxx11-note@#dr1645-using {{constructor from base class 'A' inherited here}}
+ // since-cxx11-note@#cwg1645-int-int {{candidate inherited constructor}}
+ // since-cxx11-note@#cwg1645-using {{constructor from base class 'A' inherited here}}
+ // since-cxx11-note@#cwg1645-int-int-int {{candidate inherited constructor has been explicitly deleted}}
+ // since-cxx11-note@#cwg1645-using {{constructor from base class 'A' inherited here}}
#endif
}
-namespace dr1652 { // dr1652: 3.6
+namespace cwg1652 { // cwg1652: 3.6
int a, b;
int arr[&a + 1 == &b ? 1 : 2];
// expected-error at -1 {{variable length arrays in C++ are a Clang extension}}
@@ -159,7 +159,7 @@ namespace dr1652 { // dr1652: 3.6
// expected-error at -3 {{variable length array declaration not allowed at file scope}}
}
-namespace dr1653 { // dr1653: 4 c++17
+namespace cwg1653 { // cwg1653: 4 c++17
void f(bool b) {
++b;
// cxx98-14-warning at -1 {{incrementing expression of type bool is deprecated and incompatible with C++17}}
@@ -176,10 +176,10 @@ namespace dr1653 { // dr1653: 4 c++17
}
}
-namespace dr1658 { // dr1658: 5
+namespace cwg1658 { // cwg1658: 5
namespace DefCtor {
- class A { A(); }; // #dr1658-A1
- class B { ~B(); }; // #dr1658-B1
+ class A { A(); }; // #cwg1658-A1
+ class B { ~B(); }; // #cwg1658-B1
// The stars align! An abstract class does not construct its virtual bases.
struct C : virtual A { C(); virtual void foo() = 0; };
@@ -190,76 +190,76 @@ namespace dr1658 { // dr1658: 5
// cxx98-error at -1 {{defaulted function definitions are a C++11 extension}}
// In all other cases, we are not so lucky.
- struct E : A { E(); virtual void foo() = 0; }; // #dr1658-E1
- E::E() = default; // #dr1658-E1-ctor
+ struct E : A { E(); virtual void foo() = 0; }; // #cwg1658-E1
+ E::E() = default; // #cwg1658-E1-ctor
// cxx98-error at -1 {{defaulted function definitions are a C++11 extension}}
// cxx98-error at -2 {{base class 'A' has private default constructor}}
- // cxx98-note at -3 {{in defaulted default constructor for 'dr1658::DefCtor::E' first required here}}
- // cxx98-note@#dr1658-A1 {{implicitly declared private here}}
- // since-cxx11-error@#dr1658-E1-ctor {{defaulting this default constructor would delete it after its first declaration}}
- // since-cxx11-note@#dr1658-E1 {{default constructor of 'E' is implicitly deleted because base class 'A' has an inaccessible default constructor}}
- struct F : virtual A { F(); }; // #dr1658-F1
- F::F() = default; // #dr1658-F1-ctor
+ // cxx98-note at -3 {{in defaulted default constructor for 'cwg1658::DefCtor::E' first required here}}
+ // cxx98-note@#cwg1658-A1 {{implicitly declared private here}}
+ // since-cxx11-error@#cwg1658-E1-ctor {{defaulting this default constructor would delete it after its first declaration}}
+ // since-cxx11-note@#cwg1658-E1 {{default constructor of 'E' is implicitly deleted because base class 'A' has an inaccessible default constructor}}
+ struct F : virtual A { F(); }; // #cwg1658-F1
+ F::F() = default; // #cwg1658-F1-ctor
// cxx98-error at -1 {{defaulted function definitions are a C++11 extension}}
// cxx98-error at -2 {{inherited virtual base class 'A' has private default constructor}}
- // cxx98-note at -3 {{in defaulted default constructor for 'dr1658::DefCtor::F' first required here}}
- // cxx98-note@#dr1658-A1 {{implicitly declared private here}}
- // since-cxx11-error@#dr1658-F1-ctor {{defaulting this default constructor would delete it after its first declaration}}
- // since-cxx11-note@#dr1658-F1 {{default constructor of 'F' is implicitly deleted because base class 'A' has an inaccessible default constructor}}
+ // cxx98-note at -3 {{in defaulted default constructor for 'cwg1658::DefCtor::F' first required here}}
+ // cxx98-note@#cwg1658-A1 {{implicitly declared private here}}
+ // since-cxx11-error@#cwg1658-F1-ctor {{defaulting this default constructor would delete it after its first declaration}}
+ // since-cxx11-note@#cwg1658-F1 {{default constructor of 'F' is implicitly deleted because base class 'A' has an inaccessible default constructor}}
- struct G : B { G(); virtual void foo() = 0; }; // #dr1658-G1
- G::G() = default; // #dr1658-G1-ctor
+ struct G : B { G(); virtual void foo() = 0; }; // #cwg1658-G1
+ G::G() = default; // #cwg1658-G1-ctor
// cxx98-error at -1 {{defaulted function definitions are a C++11 extension}}
- // cxx98-error@#dr1658-G1 {{base class 'B' has private destructor}}
- // cxx98-note@#dr1658-G1-ctor {{in defaulted default constructor for 'dr1658::DefCtor::G' first required here}}
- // cxx98-note@#dr1658-B1 {{implicitly declared private here}}
- // since-cxx11-error@#dr1658-G1-ctor {{defaulting this default constructor would delete it after its first declaration}}
- // since-cxx11-note@#dr1658-G1 {{default constructor of 'G' is implicitly deleted because base class 'B' has an inaccessible destructor}}
- struct H : virtual B { H(); }; // #dr1658-H1
- H::H() = default; // #dr1658-H1-ctor
+ // cxx98-error@#cwg1658-G1 {{base class 'B' has private destructor}}
+ // cxx98-note@#cwg1658-G1-ctor {{in defaulted default constructor for 'cwg1658::DefCtor::G' first required here}}
+ // cxx98-note@#cwg1658-B1 {{implicitly declared private here}}
+ // since-cxx11-error@#cwg1658-G1-ctor {{defaulting this default constructor would delete it after its first declaration}}
+ // since-cxx11-note@#cwg1658-G1 {{default constructor of 'G' is implicitly deleted because base class 'B' has an inaccessible destructor}}
+ struct H : virtual B { H(); }; // #cwg1658-H1
+ H::H() = default; // #cwg1658-H1-ctor
// cxx98-error at -1 {{defaulted function definitions are a C++11 extension}}
- // cxx98-error@#dr1658-H1 {{base class 'B' has private destructor}}
- // cxx98-note@#dr1658-H1-ctor {{in defaulted default constructor for 'dr1658::DefCtor::H' first required here}}
- // cxx98-note@#dr1658-B1 {{implicitly declared private here}}
- // since-cxx11-error@#dr1658-H1-ctor {{defaulting this default constructor would delete it after its first declaration}}
- // since-cxx11-note@#dr1658-H1 {{default constructor of 'H' is implicitly deleted because base class 'B' has an inaccessible destructor}}
+ // cxx98-error@#cwg1658-H1 {{base class 'B' has private destructor}}
+ // cxx98-note@#cwg1658-H1-ctor {{in defaulted default constructor for 'cwg1658::DefCtor::H' first required here}}
+ // cxx98-note@#cwg1658-B1 {{implicitly declared private here}}
+ // since-cxx11-error@#cwg1658-H1-ctor {{defaulting this default constructor would delete it after its first declaration}}
+ // since-cxx11-note@#cwg1658-H1 {{default constructor of 'H' is implicitly deleted because base class 'B' has an inaccessible destructor}}
}
namespace Dtor {
- class B { ~B(); }; // #dr1658-B2
+ class B { ~B(); }; // #cwg1658-B2
struct D : virtual B { ~D(); virtual void foo() = 0; };
D::~D() = default; // ok, not deleted
// cxx98-error at -1 {{defaulted function definitions are a C++11 extension}}
- struct G : B { ~G(); virtual void foo() = 0; }; // #dr1658-G2
- G::~G() = default; // #dr1658-G2-dtor
+ struct G : B { ~G(); virtual void foo() = 0; }; // #cwg1658-G2
+ G::~G() = default; // #cwg1658-G2-dtor
// cxx98-error at -1 {{defaulted function definitions are a C++11 extension}}
- // cxx98-error@#dr1658-G2 {{base class 'B' has private destructor}}
- // cxx98-note@#dr1658-G2-dtor {{in defaulted destructor for 'dr1658::Dtor::G' first required here}}
- // cxx98-note@#dr1658-B2 {{implicitly declared private here}}
- // since-cxx11-error@#dr1658-G2-dtor {{defaulting this destructor would delete it after its first declaration}}
- // since-cxx11-note@#dr1658-G2 {{destructor of 'G' is implicitly deleted because base class 'B' has an inaccessible destructor}}
- struct H : virtual B { ~H(); }; // #dr1658-H2
- H::~H() = default; // #dr1658-H2-dtor
+ // cxx98-error@#cwg1658-G2 {{base class 'B' has private destructor}}
+ // cxx98-note@#cwg1658-G2-dtor {{in defaulted destructor for 'cwg1658::Dtor::G' first required here}}
+ // cxx98-note@#cwg1658-B2 {{implicitly declared private here}}
+ // since-cxx11-error@#cwg1658-G2-dtor {{defaulting this destructor would delete it after its first declaration}}
+ // since-cxx11-note@#cwg1658-G2 {{destructor of 'G' is implicitly deleted because base class 'B' has an inaccessible destructor}}
+ struct H : virtual B { ~H(); }; // #cwg1658-H2
+ H::~H() = default; // #cwg1658-H2-dtor
// cxx98-error at -1 {{defaulted function definitions are a C++11 extension}}
- // cxx98-error@#dr1658-H2 {{base class 'B' has private destructor}}
- // cxx98-note@#dr1658-H2-dtor {{in defaulted destructor for 'dr1658::Dtor::H' first required here}}
- // cxx98-note@#dr1658-B2 {{implicitly declared private here}}
- // since-cxx11-error@#dr1658-H2-dtor {{defaulting this destructor would delete it after its first declaration}}
- // since-cxx11-note@#dr1658-H2 {{destructor of 'H' is implicitly deleted because base class 'B' has an inaccessible destructor}}
+ // cxx98-error@#cwg1658-H2 {{base class 'B' has private destructor}}
+ // cxx98-note@#cwg1658-H2-dtor {{in defaulted destructor for 'cwg1658::Dtor::H' first required here}}
+ // cxx98-note@#cwg1658-B2 {{implicitly declared private here}}
+ // since-cxx11-error@#cwg1658-H2-dtor {{defaulting this destructor would delete it after its first declaration}}
+ // since-cxx11-note@#cwg1658-H2 {{destructor of 'H' is implicitly deleted because base class 'B' has an inaccessible destructor}}
}
namespace MemInit {
- struct A { A(int); }; // #dr1658-A3
+ struct A { A(int); }; // #cwg1658-A3
struct B : virtual A {
B() {}
virtual void f() = 0;
};
struct C : virtual A {
C() {}
- // expected-error at -1 {{constructor for 'dr1658::MemInit::C' must explicitly initialize the base class 'A' which does not have a default constructor}}
- // expected-note@#dr1658-A3 {{'dr1658::MemInit::A' declared here}}
+ // expected-error at -1 {{constructor for 'cwg1658::MemInit::C' must explicitly initialize the base class 'A' which does not have a default constructor}}
+ // expected-note@#cwg1658-A3 {{'cwg1658::MemInit::A' declared here}}
};
}
@@ -277,7 +277,7 @@ namespace dr1658 { // dr1658: 5
}
namespace CopyCtor {
- class A { A(const A&); A(A&&); }; // #dr1658-A5
+ class A { A(const A&); A(A&&); }; // #cwg1658-A5
// cxx98-error at -1 {{rvalue references are a C++11 extension}}
struct C : virtual A { C(const C&); C(C&&); virtual void foo() = 0; };
@@ -288,46 +288,46 @@ namespace dr1658 { // dr1658: 5
// cxx98-error at -1 {{rvalue references are a C++11 extension}}
// cxx98-error at -2 {{defaulted function definitions are a C++11 extension}}
- struct E : A { E(const E&); E(E&&); virtual void foo() = 0; }; // #dr1658-E5
+ struct E : A { E(const E&); E(E&&); virtual void foo() = 0; }; // #cwg1658-E5
// cxx98-error at -1 {{rvalue references are a C++11 extension}}
- E::E(const E&) = default; // #dr1658-E5-copy-ctor
+ E::E(const E&) = default; // #cwg1658-E5-copy-ctor
// cxx98-error at -1 {{defaulted function definitions are a C++11 extension}}
// cxx98-error at -2 {{base class 'A' has private copy constructor}}
- // cxx98-note at -3 {{in defaulted copy constructor for 'dr1658::CopyCtor::E' first required here}}
- // cxx98-note@#dr1658-A5 {{implicitly declared private here}}
- // since-cxx11-error@#dr1658-E5-copy-ctor {{defaulting this copy constructor would delete it after its first declaration}}
- // since-cxx11-note@#dr1658-E5 {{copy constructor of 'E' is implicitly deleted because base class 'A' has an inaccessible copy constructor}}
- E::E(E&&) = default; // #dr1658-E5-move-ctor
+ // cxx98-note at -3 {{in defaulted copy constructor for 'cwg1658::CopyCtor::E' first required here}}
+ // cxx98-note@#cwg1658-A5 {{implicitly declared private here}}
+ // since-cxx11-error@#cwg1658-E5-copy-ctor {{defaulting this copy constructor would delete it after its first declaration}}
+ // since-cxx11-note@#cwg1658-E5 {{copy constructor of 'E' is implicitly deleted because base class 'A' has an inaccessible copy constructor}}
+ E::E(E&&) = default; // #cwg1658-E5-move-ctor
// cxx98-error at -1 {{rvalue references are a C++11 extension}}
// cxx98-error at -2 {{defaulted function definitions are a C++11 extension}}
// cxx98-error at -3 {{base class 'A' has private move constructor}}
- // cxx98-note at -4 {{in defaulted move constructor for 'dr1658::CopyCtor::E' first required here}}
- // cxx98-note@#dr1658-A5 {{implicitly declared private here}}
- // since-cxx11-error@#dr1658-E5-move-ctor {{defaulting this move constructor would delete it after its first declaration}}
- // since-cxx11-note@#dr1658-E5 {{move constructor of 'E' is implicitly deleted because base class 'A' has an inaccessible move constructor}}
- struct F : virtual A { F(const F&); F(F&&); }; // #dr1658-F5
+ // cxx98-note at -4 {{in defaulted move constructor for 'cwg1658::CopyCtor::E' first required here}}
+ // cxx98-note@#cwg1658-A5 {{implicitly declared private here}}
+ // since-cxx11-error@#cwg1658-E5-move-ctor {{defaulting this move constructor would delete it after its first declaration}}
+ // since-cxx11-note@#cwg1658-E5 {{move constructor of 'E' is implicitly deleted because base class 'A' has an inaccessible move constructor}}
+ struct F : virtual A { F(const F&); F(F&&); }; // #cwg1658-F5
// cxx98-error at -1 {{rvalue references are a C++11 extension}}
- F::F(const F&) = default; // #dr1658-F5-copy-ctor
+ F::F(const F&) = default; // #cwg1658-F5-copy-ctor
// cxx98-error at -1 {{defaulted function definitions are a C++11 extension}}
// cxx98-error at -2 {{inherited virtual base class 'A' has private copy constructor}}
- // cxx98-note at -3 {{in defaulted copy constructor for 'dr1658::CopyCtor::F' first required here}}
- // cxx98-note@#dr1658-A5 {{implicitly declared private here}}
- // since-cxx11-error@#dr1658-F5-copy-ctor {{defaulting this copy constructor would delete it after its first declaration}}
- // since-cxx11-note@#dr1658-F5 {{copy constructor of 'F' is implicitly deleted because base class 'A' has an inaccessible copy constructor}}
- F::F(F&&) = default; // #dr1658-F5-move-ctor
+ // cxx98-note at -3 {{in defaulted copy constructor for 'cwg1658::CopyCtor::F' first required here}}
+ // cxx98-note@#cwg1658-A5 {{implicitly declared private here}}
+ // since-cxx11-error@#cwg1658-F5-copy-ctor {{defaulting this copy constructor would delete it after its first declaration}}
+ // since-cxx11-note@#cwg1658-F5 {{copy constructor of 'F' is implicitly deleted because base class 'A' has an inaccessible copy constructor}}
+ F::F(F&&) = default; // #cwg1658-F5-move-ctor
// cxx98-error at -1 {{rvalue references are a C++11 extension}}
// cxx98-error at -2 {{defaulted function definitions are a C++11 extension}}
// cxx98-error at -3 {{inherited virtual base class 'A' has private move constructor}}
- // cxx98-note at -4 {{in defaulted move constructor for 'dr1658::CopyCtor::F' first required here}}
- // cxx98-note@#dr1658-A5 {{implicitly declared private here}}
- // since-cxx11-error@#dr1658-F5-move-ctor {{defaulting this move constructor would delete it after its first declaration}}
- // since-cxx11-note@#dr1658-F5 {{move constructor of 'F' is implicitly deleted because base class 'A' has an inaccessible move constructor}}
+ // cxx98-note at -4 {{in defaulted move constructor for 'cwg1658::CopyCtor::F' first required here}}
+ // cxx98-note@#cwg1658-A5 {{implicitly declared private here}}
+ // since-cxx11-error@#cwg1658-F5-move-ctor {{defaulting this move constructor would delete it after its first declaration}}
+ // since-cxx11-note@#cwg1658-F5 {{move constructor of 'F' is implicitly deleted because base class 'A' has an inaccessible move constructor}}
}
- // assignment case is superseded by dr2180
+ // assignment case is superseded by cwg2180
}
-namespace dr1672 { // dr1672: 7
+namespace cwg1672 { // cwg1672: 7
struct Empty {};
struct A : Empty {};
struct B { Empty e; };
@@ -352,9 +352,9 @@ namespace dr1672 { // dr1672: 7
static_assert(!__is_standard_layout(Y<X>), "");
}
-namespace dr1684 { // dr1684: 3.6
+namespace cwg1684 { // cwg1684: 3.6
#if __cplusplus >= 201103L
- struct NonLiteral { // #dr1684-struct
+ struct NonLiteral { // #cwg1684-struct
NonLiteral();
constexpr int f() { return 0; }
// cxx11-warning at -1 {{'constexpr' non-static member function will not be implicitly 'const' in C++14; add 'const' to avoid a change in behavior}}
@@ -362,34 +362,34 @@ namespace dr1684 { // dr1684: 3.6
constexpr int f(NonLiteral &) { return 0; }
constexpr int f(NonLiteral) { return 0; }
// cxx11-20-error at -1 {{constexpr function's 1st parameter type 'NonLiteral' is not a literal type}}
- // cxx11-20-note@#dr1684-struct {{'NonLiteral' is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors}}
+ // cxx11-20-note@#cwg1684-struct {{'NonLiteral' is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors}}
#endif
}
-namespace dr1687 { // dr1687: 7
+namespace cwg1687 { // cwg1687: 7
template<typename T> struct To {
- operator T(); // #dr1687-op-T
+ operator T(); // #cwg1687-op-T
};
int *a = To<int*>() + 100.0;
// expected-error at -1 {{invalid operands to binary expression ('To<int *>' and 'double')}}
- // expected-note@#dr1687-op-T {{first operand was implicitly converted to type 'int *'}}
- // since-cxx20-note@#dr1687-op-T {{second operand was implicitly converted to type 'dr1687::E2'}}
+ // expected-note@#cwg1687-op-T {{first operand was implicitly converted to type 'int *'}}
+ // since-cxx20-note@#cwg1687-op-T {{second operand was implicitly converted to type 'cwg1687::E2'}}
int *b = To<int*>() + To<double>();
// expected-error at -1 {{invalid operands to binary expression ('To<int *>' and 'To<double>')}}
- // expected-note@#dr1687-op-T {{first operand was implicitly converted to type 'int *'}}
- // expected-note@#dr1687-op-T {{second operand was implicitly converted to type 'double'}}
+ // expected-note@#cwg1687-op-T {{first operand was implicitly converted to type 'int *'}}
+ // expected-note@#cwg1687-op-T {{second operand was implicitly converted to type 'double'}}
#if __cplusplus >= 202002L
enum E1 {};
enum E2 {};
auto c = To<E1>() <=> To<E2>();
// since-cxx20-error at -1 {{invalid operands to binary expression ('To<E1>' and 'To<E2>')}}
- // since-cxx20-note@#dr1687-op-T {{operand was implicitly converted to type 'dr1687::E}}
+ // since-cxx20-note@#cwg1687-op-T {{operand was implicitly converted to type 'cwg1687::E}}
#endif
}
-namespace dr1690 { // dr1690: 9
+namespace cwg1690 { // cwg1690: 9
// See also the various tests in "CXX/basic/basic.lookup/basic.lookup.argdep".
#if __cplusplus >= 201103L
namespace N {
@@ -404,7 +404,7 @@ namespace dr1690 { // dr1690: 9
#endif
}
-namespace dr1691 { // dr1691: 9
+namespace cwg1691 { // cwg1691: 9
#if __cplusplus >= 201103L
namespace N {
namespace M {
@@ -412,19 +412,19 @@ namespace dr1691 { // dr1691: 9
void f(E);
}
enum M::E : int {};
- void g(M::E); // #dr1691-g
+ void g(M::E); // #cwg1691-g
}
void test() {
N::M::E e;
f(e); // ok
g(e);
// since-cxx11-error at -1 {{use of undeclared identifier 'g'; did you mean 'N::g'?}}
- // since-cxx11-note@#dr1691-g {{'N::g' declared here}}
+ // since-cxx11-note@#cwg1691-g {{'N::g' declared here}}
}
#endif
}
-namespace dr1692 { // dr1692: 9
+namespace cwg1692 { // cwg1692: 9
namespace N {
struct A {
struct B {
@@ -439,7 +439,7 @@ namespace dr1692 { // dr1692: 9
}
}
-namespace dr1696 { // dr1696: 7
+namespace cwg1696 { // cwg1696: 7
namespace std_examples {
#if __cplusplus >= 201402L
extern struct A a;
@@ -456,66 +456,66 @@ namespace dr1696 { // dr1696: 7
struct A { A(); ~A(); };
#if __cplusplus >= 201103L
struct B {
- A &&a; // #dr1696-a
+ A &&a; // #cwg1696-a
B() : a{} {}
// since-cxx11-error at -1 {{reference member 'a' binds to a temporary object whose lifetime would be shorter than the lifetime of the constructed object}}
- // since-cxx11-note@#dr1696-a {{reference member declared here}}
+ // since-cxx11-note@#cwg1696-a {{reference member declared here}}
} b;
#endif
struct C {
C();
- const A &a; // #dr1696-C-a
+ const A &a; // #cwg1696-C-a
};
C::C() : a(A()) {}
// expected-error at -1 {{reference member 'a' binds to a temporary object whose lifetime would be shorter than the lifetime of the constructed object}}
- // expected-note@#dr1696-C-a {{reference member declared here}}
+ // expected-note@#cwg1696-C-a {{reference member declared here}}
#if __cplusplus >= 201103L
- // This is OK in C++14 onwards, per DR1815, though we don't support that yet:
+ // This is OK in C++14 onwards, per CWG1815, though we don't support that yet:
// D1 d1 = {};
// is equivalent to
// D1 d1 = {A()};
// ... which lifetime-extends the A temporary.
struct D1 {
// cxx11-error at -1 {{reference member 'a' binds to a temporary object whose lifetime would be shorter than the lifetime of the constructed object}}
- // cxx11-note@#dr1696-d1 {{in implicit default constructor for 'dr1696::D1' first required here}}
- // cxx11-note@#dr1696-D1-a {{initializing field 'a' with default member initializer}}
- const A &a = A(); // #dr1696-D1-a
+ // cxx11-note@#cwg1696-d1 {{in implicit default constructor for 'cwg1696::D1' first required here}}
+ // cxx11-note@#cwg1696-D1-a {{initializing field 'a' with default member initializer}}
+ const A &a = A(); // #cwg1696-D1-a
};
- D1 d1 = {}; // #dr1696-d1
+ D1 d1 = {}; // #cwg1696-d1
// since-cxx14-warning at -1 {{lifetime extension of temporary created by aggregate initialization using a default member initializer is not yet supported; lifetime of temporary will end at the end of the full-expression}}
- // since-cxx14-note@#dr1696-D1-a {{initializing field 'a' with default member initializer}}
+ // since-cxx14-note@#cwg1696-D1-a {{initializing field 'a' with default member initializer}}
struct D2 {
- const A &a = A(); // #dr1696-D2-a
+ const A &a = A(); // #cwg1696-D2-a
D2() {}
// since-cxx11-error at -1 {{reference member 'a' binds to a temporary object whose lifetime would be shorter than the lifetime of the constructed object}}
- // since-cxx11-note@#dr1696-D2-a {{initializing field 'a' with default member initializer}}
+ // since-cxx11-note@#cwg1696-D2-a {{initializing field 'a' with default member initializer}}
};
struct D3 {
// since-cxx11-error at -1 {{reference member 'a' binds to a temporary object whose lifetime would be shorter than the lifetime of the constructed object}}
- // since-cxx11-note@#dr1696-d3 {{in implicit default constructor for 'dr1696::D3' first required here}}
- // since-cxx11-note@#dr1696-D3-a {{initializing field 'a' with default member initializer}}
- const A &a = A(); // #dr1696-D3-a
+ // since-cxx11-note@#cwg1696-d3 {{in implicit default constructor for 'cwg1696::D3' first required here}}
+ // since-cxx11-note@#cwg1696-D3-a {{initializing field 'a' with default member initializer}}
+ const A &a = A(); // #cwg1696-D3-a
};
- D3 d3; // #dr1696-d3
+ D3 d3; // #cwg1696-d3
struct haslist1 {
- std::initializer_list<int> il; // #dr1696-il-1
+ std::initializer_list<int> il; // #cwg1696-il-1
haslist1(int i) : il{i, 2, 3} {}
// since-cxx11-error at -1 {{backing array for 'std::initializer_list' member 'il' is a temporary object whose lifetime would be shorter than the lifetime of the constructed object}}
- // since-cxx11-note@#dr1696-il-1 {{'std::initializer_list' member declared here}}
+ // since-cxx11-note@#cwg1696-il-1 {{'std::initializer_list' member declared here}}
};
struct haslist2 {
- std::initializer_list<int> il; // #dr1696-il-2
+ std::initializer_list<int> il; // #cwg1696-il-2
haslist2();
};
haslist2::haslist2() : il{1, 2} {}
// since-cxx11-error at -1 {{backing array for 'std::initializer_list' member 'il' is a temporary object whose lifetime would be shorter than the lifetime of the constructed object}}
- // since-cxx11-note@#dr1696-il-2 {{'std::initializer_list' member declared here}}
+ // since-cxx11-note@#cwg1696-il-2 {{'std::initializer_list' member declared here}}
struct haslist3 {
std::initializer_list<int> il = {1, 2, 3};
@@ -523,17 +523,17 @@ namespace dr1696 { // dr1696: 7
struct haslist4 {
// since-cxx11-error at -1 {{backing array for 'std::initializer_list' member 'il' is a temporary object whose lifetime would be shorter than the lifetime of the constructed object}}
- // since-cxx11-note@#dr1696-hl4 {{in implicit default constructor for 'dr1696::haslist4' first required here}}
- // since-cxx11-note@#dr1696-il-4 {{initializing field 'il' with default member initializer}}
- std::initializer_list<int> il = {1, 2, 3}; // #dr1696-il-4
+ // since-cxx11-note@#cwg1696-hl4 {{in implicit default constructor for 'cwg1696::haslist4' first required here}}
+ // since-cxx11-note@#cwg1696-il-4 {{initializing field 'il' with default member initializer}}
+ std::initializer_list<int> il = {1, 2, 3}; // #cwg1696-il-4
};
- haslist4 hl4; // #dr1696-hl4
+ haslist4 hl4; // #cwg1696-hl4
struct haslist5 {
- std::initializer_list<int> il = {1, 2, 3}; // #dr1696-il-5
+ std::initializer_list<int> il = {1, 2, 3}; // #cwg1696-il-5
haslist5() {}
// since-cxx11-error at -1 {{backing array for 'std::initializer_list' member 'il' is a temporary object whose lifetime would be shorter than the lifetime of the constructed object}}
- // since-cxx11-note@#dr1696-il-5 {{nitializing field 'il' with default member initializer}}
+ // since-cxx11-note@#cwg1696-il-5 {{nitializing field 'il' with default member initializer}}
};
#endif
}
diff --git a/clang/test/CXX/drs/dr17xx.cpp b/clang/test/CXX/drs/dr17xx.cpp
index d3cb5e58f06b32..fb53a56923b104 100644
--- a/clang/test/CXX/drs/dr17xx.cpp
+++ b/clang/test/CXX/drs/dr17xx.cpp
@@ -6,7 +6,7 @@
// RUN: %clang_cc1 -std=c++23 %s -verify=expected,since-cxx11 -fexceptions -fcxx-exceptions -pedantic-errors
// RUN: %clang_cc1 -std=c++2c %s -verify=expected,since-cxx11 -fexceptions -fcxx-exceptions -pedantic-errors
-namespace dr1710 { // dr1710: no
+namespace cwg1710 { // cwg1710: no
// FIXME: all of the following is well-formed
template <typename T> struct D1 : T::template B<int>::template C<int> {};
template <typename T> struct D2 : T::B<int>::template C<int> {};
@@ -16,9 +16,9 @@ template <typename T> struct D3 : T::template B<int>::C<int> {};
template <typename T> struct D4 : T::B<int>::C<int> {};
// expected-error at -1 {{use 'template' keyword to treat 'B' as a dependent template name}}
// expected-error at -2 {{use 'template' keyword to treat 'C' as a dependent template name}}
-} // namespace dr1710
+} // namespace cwg1710
-namespace dr1715 { // dr1715: 3.9
+namespace cwg1715 { // cwg1715: 3.9
#if __cplusplus >= 201103L
struct B {
template<class T> B(T, typename T::Q);
@@ -32,21 +32,21 @@ namespace dr1715 { // dr1715: 3.9
struct D : B {
using B::B;
};
- struct E : B { // #dr1715-E
- template<class T> E(T t, typename T::Q q) : B(t, q) {} // #dr1715-E-ctor
+ struct E : B { // #cwg1715-E
+ template<class T> E(T t, typename T::Q q) : B(t, q) {} // #cwg1715-E-ctor
};
B b(S(), 1);
D d(S(), 2);
E e(S(), 3);
// since-cxx11-error at -1 {{no matching constructor for initialization of 'E'}}
- // since-cxx11-note@#dr1715-E-ctor {{candidate template ignored: substitution failure [with T = S]: 'Q' is a private member of 'dr1715::S'}}
- // since-cxx11-note@#dr1715-E {{candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided}}
- // since-cxx11-note@#dr1715-E {{candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 2 were provided}}
+ // since-cxx11-note@#cwg1715-E-ctor {{candidate template ignored: substitution failure [with T = S]: 'Q' is a private member of 'cwg1715::S'}}
+ // since-cxx11-note@#cwg1715-E {{candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided}}
+ // since-cxx11-note@#cwg1715-E {{candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 2 were provided}}
#endif
}
-namespace dr1719 { // dr1719: 19
+namespace cwg1719 { // cwg1719: 19
#if __cplusplus >= 201103L
struct CStruct {
int one;
@@ -72,9 +72,9 @@ static_assert(__is_layout_compatible(const int, volatile int), "");
static_assert(__is_layout_compatible(CStruct, CStructWithQualifiers), "");
static_assert(__is_layout_compatible(int[], const volatile int[]), "");
#endif
-} // namespace dr1719
+} // namespace cwg1719
-namespace dr1722 { // dr1722: 9
+namespace cwg1722 { // cwg1722: 9
#if __cplusplus >= 201103L
void f() {
const auto lambda = [](int x) { return x + 1; };
@@ -84,9 +84,9 @@ void f() {
"Lambda-to-function-pointer conversion is expected to be noexcept");
}
#endif
-} // namespace dr1722
+} // namespace cwg1722
-namespace dr1734 { // dr1734: no
+namespace cwg1734 { // cwg1734: no
#if __cplusplus >= 201103L
struct A {
A(const A&) = delete;
@@ -98,7 +98,7 @@ static_assert(__is_trivially_copyable(A), "");
#endif
}
-namespace dr1736 { // dr1736: 3.9
+namespace cwg1736 { // cwg1736: 3.9
#if __cplusplus >= 201103L
struct S {
template <class T> S(T t) {
@@ -107,17 +107,17 @@ struct S {
};
typename T::type value;
// since-cxx11-error at -1 {{type 'int' cannot be used prior to '::' because it has no members}}
- // since-cxx11-note@#dr1736-l {{in instantiation of function template specialization 'dr1736::S::S<int>' requested here}}
- // since-cxx11-note@#dr1736-s {{in instantiation of function template specialization 'dr1736::S::S<dr1736::Q>' requested here}}
- L l(value); // #dr1736-l
+ // since-cxx11-note@#cwg1736-l {{in instantiation of function template specialization 'cwg1736::S::S<int>' requested here}}
+ // since-cxx11-note@#cwg1736-s {{in instantiation of function template specialization 'cwg1736::S::S<cwg1736::Q>' requested here}}
+ L l(value); // #cwg1736-l
}
};
struct Q { typedef int type; } q;
-S s(q); // #dr1736-s
+S s(q); // #cwg1736-s
#endif
}
-namespace dr1738 { // dr1738: sup P0136R1
+namespace cwg1738 { // cwg1738: sup P0136R1
#if __cplusplus >= 201103L
struct A {
template <typename T>
@@ -134,9 +134,9 @@ template B::B(int, double);
#endif
}
-// dr1748 is in dr1748.cpp
+// cwg1748 is in cwg1748.cpp
-namespace dr1753 { // dr1753: 11
+namespace cwg1753 { // cwg1753: 11
typedef int T;
struct A { typedef int T; };
namespace B { typedef int T; }
@@ -145,9 +145,9 @@ namespace dr1753 { // dr1753: 11
n.~T();
n.T::~T();
- n.dr1753::~T();
- // expected-error at -1 {{'dr1753' does not refer to a type name in pseudo-destructor expression; expected the name of type 'T' (aka 'int')}}
- n.dr1753::T::~T();
+ n.cwg1753::~T();
+ // expected-error at -1 {{'cwg1753' does not refer to a type name in pseudo-destructor expression; expected the name of type 'T' (aka 'int')}}
+ n.cwg1753::T::~T();
n.A::~T();
// expected-error at -1 {{the type of object expression ('T' (aka 'int')) does not match the type being destroyed ('A') in pseudo-destructor expression}}
@@ -167,7 +167,7 @@ namespace dr1753 { // dr1753: 11
}
}
-namespace dr1756 { // dr1756: 3.7
+namespace cwg1756 { // cwg1756: 3.7
#if __cplusplus >= 201103L
// Direct-list-initialization of a non-class object
@@ -178,7 +178,7 @@ namespace dr1756 { // dr1756: 3.7
#endif
}
-namespace dr1758 { // dr1758: 3.7
+namespace cwg1758 { // cwg1758: 3.7
#if __cplusplus >= 201103L
// Explicit conversion in copy/move list initialization
@@ -197,7 +197,7 @@ namespace dr1758 { // dr1758: 3.7
#endif
}
-namespace dr1762 { // dr1762: 14
+namespace cwg1762 { // cwg1762: 14
#if __cplusplus >= 201103L
float operator ""_E(const char *);
float operator ""E(const char *);
@@ -206,9 +206,9 @@ namespace dr1762 { // dr1762: 14
#endif
}
-// dr1772 is in dr177x.cpp
+// cwg1772 is in cwg177x.cpp
-namespace dr1778 { // dr1778: 9
+namespace cwg1778 { // cwg1778: 9
// Superseded by P1286R2.
#if __cplusplus >= 201103L
struct A { A() noexcept(true) = default; };
@@ -223,9 +223,9 @@ namespace dr1778 { // dr1778: 9
#endif
}
-// dr1779 is in dr177x.cpp
+// cwg1779 is in cwg177x.cpp
-namespace dr1794 { // dr1794: yes
+namespace cwg1794 { // cwg1794: yes
// NB: dup 1710
#if __cplusplus >= 201103L
template <template <typename> class Template> struct Internal {
@@ -238,4 +238,4 @@ using Instantiate = Template<Arg>;
template <template <typename> class Template, typename Argument>
using Bind = Instantiate<Internal<Template>::template Bind, Argument>;
#endif
-} // namespace dr1794
+} // namespace cwg1794
diff --git a/clang/test/CXX/drs/dr18xx.cpp b/clang/test/CXX/drs/dr18xx.cpp
index e78730e8992cf8..3a2248a1af5513 100644
--- a/clang/test/CXX/drs/dr18xx.cpp
+++ b/clang/test/CXX/drs/dr18xx.cpp
@@ -11,24 +11,24 @@
// cxx98-error at -1 {{variadic macros are a C99 feature}}
#endif
-namespace dr1800 { // dr1800: 2.9
+namespace cwg1800 { // cwg1800: 2.9
struct A { union { int n; }; };
static_assert(__is_same(__decltype(&A::n), int A::*), "");
-} // namespace dr1800
+} // namespace cwg1800
-namespace dr1801 { // dr1801: 2.8
+namespace cwg1801 { // cwg1801: 2.8
static union {
int i;
};
-template <int &> struct S {}; // #dr1801-S
-S<i> V; // #dr1801-S-i
+template <int &> struct S {}; // #cwg1801-S
+S<i> V; // #cwg1801-S-i
// cxx98-14-error at -1 {{non-type template argument does not refer to any declaration}}
-// cxx98-14-note@#dr1801-S {{template parameter is declared here}}
-// cxx17-error@#dr1801-S-i {{non-type template argument refers to subobject '.i'}}
+// cxx98-14-note@#cwg1801-S {{template parameter is declared here}}
+// cxx17-error@#cwg1801-S-i {{non-type template argument refers to subobject '.i'}}
}
-namespace dr1802 { // dr1802: 3.1
+namespace cwg1802 { // cwg1802: 3.1
#if __cplusplus >= 201103L
// Using a Wikipedia example of surrogate pair:
// https://en.wikipedia.org/wiki/UTF-16#Examples
@@ -37,9 +37,9 @@ static_assert(a[0] == 0xD801, "");
static_assert(a[1] == 0xDC37, "");
static_assert(a[2] == 0x0, "");
#endif
-} // namespace dr1802
+} // namespace cwg1802
-namespace dr1803 { // dr1803: 2.9
+namespace cwg1803 { // cwg1803: 2.9
#if __cplusplus >= 201103L
struct A {
enum E : int;
@@ -50,9 +50,9 @@ struct A {
enum struct ES {};
};
#endif
-} // namespace dr1803
+} // namespace cwg1803
-namespace dr1804 { // dr1804: 2.7
+namespace cwg1804 { // cwg1804: 2.7
template <typename, typename>
struct A {
void f1();
@@ -162,11 +162,11 @@ void A<double, U>::C<V>::f4() {
D d;
d.i = 0;
}
-} // namespace dr1804
+} // namespace cwg1804
-// dr1807 is in dr1807.cpp
+// cwg1807 is in cwg1807.cpp
-namespace dr1812 { // dr1812: no
+namespace cwg1812 { // cwg1812: no
// NB: dup 1710
#if __cplusplus >= 201103L
template <typename T> struct A {
@@ -174,9 +174,9 @@ template <typename T> struct A {
// since-cxx11-error at -1 {{use 'template' keyword to treat 'C' as a dependent template name}}
};
#endif
-} // namespace dr1812
+} // namespace cwg1812
-namespace dr1813 { // dr1813: 7
+namespace cwg1813 { // cwg1813: 7
struct B { int i; };
struct C : B {};
struct D : C {};
@@ -198,7 +198,7 @@ namespace dr1813 { // dr1813: 7
static_assert(!__is_standard_layout(U), "");
}
-namespace dr1814 { // dr1814: yes
+namespace cwg1814 { // cwg1814: yes
#if __cplusplus >= 201103L
void test() {
auto lam = [](int x = 42) { return x; };
@@ -206,23 +206,23 @@ namespace dr1814 { // dr1814: yes
#endif
}
-namespace dr1815 { // dr1815: no
+namespace cwg1815 { // cwg1815: no
#if __cplusplus >= 201402L
// FIXME: needs codegen test
- struct A { int &&r = 0; }; // #dr1815-A
+ struct A { int &&r = 0; }; // #cwg1815-A
A a = {};
// since-cxx14-warning at -1 {{lifetime extension of temporary created by aggregate initialization using a default member initializer is not yet supported; lifetime of temporary will end at the end of the full-expression}} FIXME
- // since-cxx14-note@#dr1815-A {{initializing field 'r' with default member initializer}}
+ // since-cxx14-note@#cwg1815-A {{initializing field 'r' with default member initializer}}
- struct B { int &&r = 0; }; // #dr1815-B
+ struct B { int &&r = 0; }; // #cwg1815-B
// since-cxx14-error at -1 {{reference member 'r' binds to a temporary object whose lifetime would be shorter than the lifetime of the constructed object}}
- // since-cxx14-note@#dr1815-B {{initializing field 'r' with default member initializer}}
- // since-cxx14-note@#dr1815-b {{in implicit default constructor for 'dr1815::B' first required here}}
- B b; // #dr1815-b
+ // since-cxx14-note@#cwg1815-B {{initializing field 'r' with default member initializer}}
+ // since-cxx14-note@#cwg1815-b {{in implicit default constructor for 'cwg1815::B' first required here}}
+ B b; // #cwg1815-b
#endif
}
-namespace dr1821 { // dr1821: 2.9
+namespace cwg1821 { // cwg1821: 2.9
struct A {
template <typename> struct B {
void f();
@@ -236,9 +236,9 @@ struct A {
void C::f() {}
// expected-error at -1 {{non-friend class member 'f' cannot have a qualified name}}
};
-} // namespace dr1821
+} // namespace cwg1821
-namespace dr1822 { // dr1822: yes
+namespace cwg1822 { // cwg1822: yes
#if __cplusplus >= 201103L
double a;
auto x = [] (int a) {
@@ -247,7 +247,7 @@ namespace dr1822 { // dr1822: yes
#endif
}
-namespace dr1837 { // dr1837: 3.3
+namespace cwg1837 { // cwg1837: 3.3
#if __cplusplus >= 201103L
template <typename T>
struct Fish { static const bool value = true; };
@@ -291,7 +291,7 @@ namespace dr1837 { // dr1837: 3.3
#endif
}
-namespace dr1872 { // dr1872: 9
+namespace cwg1872 { // cwg1872: 9
#if __cplusplus >= 201103L
template<typename T> struct A : T {
constexpr int f() const { return 0; }
@@ -320,7 +320,7 @@ namespace dr1872 { // dr1872: 9
#endif
}
-namespace dr1878 { // dr1878: 18
+namespace cwg1878 { // cwg1878: 18
#if __cplusplus >= 201402L
#if __cplusplus >= 202002L
template <typename T>
@@ -355,7 +355,7 @@ struct S {
#endif
}
-namespace dr1881 { // dr1881: 7
+namespace cwg1881 { // cwg1881: 7
struct A { int a : 4; };
struct B : A { int b : 3; };
static_assert(__is_standard_layout(A), "");
@@ -367,17 +367,17 @@ namespace dr1881 { // dr1881: 7
static_assert(!__is_standard_layout(D), "");
}
-namespace dr1890 { // dr1890: no drafting 2018-06-04
+namespace cwg1890 { // cwg1890: no drafting 2018-06-04
// FIXME: current consensus for CWG2335 is that the examples are well-formed.
namespace ex1 {
#if __cplusplus >= 201402L
struct A {
struct B {
- auto foo() { return 0; } // #dr1890-foo
+ auto foo() { return 0; } // #cwg1890-foo
};
decltype(B().foo()) x;
// since-cxx14-error at -1 {{function 'foo' with deduced return type cannot be used before it is defined}}
- // since-cxx14-note@#dr1890-foo {{'foo' declared here}}
+ // since-cxx14-note@#cwg1890-foo {{'foo' declared here}}
};
#endif
} // namespace ex1
@@ -389,17 +389,17 @@ struct Bar {
int a = 0;
};
static_assert(__is_constructible(Baz), "");
- // since-cxx11-error at -1 {{static assertion failed due to requirement '__is_constructible(dr1890::ex2::Bar::Baz)'}}
+ // since-cxx11-error at -1 {{static assertion failed due to requirement '__is_constructible(cwg1890::ex2::Bar::Baz)'}}
};
#endif
} // namespace ex2
-} // namespace dr1890
+} // namespace cwg1890
-void dr1891() { // dr1891: 4
+void cwg1891() { // cwg1891: 4
#if __cplusplus >= 201103L
int n;
- auto a = []{}; // #dr1891-a
- auto b = [=]{ return n; }; // #dr1891-b
+ auto a = []{}; // #cwg1891-a
+ auto b = [=]{ return n; }; // #cwg1891-b
typedef decltype(a) A;
typedef decltype(b) B;
@@ -410,31 +410,31 @@ void dr1891() { // dr1891: 4
// C++20 allows default construction for non-capturing lambdas (P0624R2).
A x;
// cxx11-17-error at -1 {{no matching constructor for initialization of 'A' (aka '(lambda at}}
- // cxx11-17-note@#dr1891-a {{candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0 were provided}}
- // cxx11-17-note@#dr1891-a {{candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 0 were provided}}
+ // cxx11-17-note@#cwg1891-a {{candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0 were provided}}
+ // cxx11-17-note@#cwg1891-a {{candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 0 were provided}}
B y;
// since-cxx11-error at -1 {{no matching constructor for initialization of 'B' (aka '(lambda at}}
- // since-cxx11-note@#dr1891-b {{candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0 were provided}}
- // since-cxx11-note@#dr1891-b {{candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 0 were provided}}
+ // since-cxx11-note@#cwg1891-b {{candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0 were provided}}
+ // since-cxx11-note@#cwg1891-b {{candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 0 were provided}}
// C++20 allows assignment for non-capturing lambdas (P0624R2).
a = a;
// cxx11-17-error-re at -1 {{{{object of type '\(lambda at .+\)' cannot be assigned because its copy assignment operator is implicitly deleted}}}}
- // cxx11-17-note@#dr1891-a {{lambda expression begins here}}
+ // cxx11-17-note@#cwg1891-a {{lambda expression begins here}}
a = static_cast<A&&>(a);
// cxx11-17-error-re at -1 {{{{object of type '\(lambda at .+\)' cannot be assigned because its copy assignment operator is implicitly deleted}}}}
- // cxx11-17-note@#dr1891-a {{lambda expression begins here}}
+ // cxx11-17-note@#cwg1891-a {{lambda expression begins here}}
b = b;
// since-cxx11-error-re at -1 {{{{object of type '\(lambda at .+\)' cannot be assigned because its copy assignment operator is implicitly deleted}}}}
- // since-cxx11-note@#dr1891-b {{lambda expression begins here}}
+ // since-cxx11-note@#cwg1891-b {{lambda expression begins here}}
b = static_cast<B&&>(b);
// since-cxx11-error-re at -1 {{{{object of type '\(lambda at .+\)' cannot be assigned because its copy assignment operator is implicitly deleted}}}}
- // since-cxx11-note@#dr1891-b {{lambda expression begins here}}
+ // since-cxx11-note@#cwg1891-b {{lambda expression begins here}}
#endif
}
-namespace dr1894 { // dr1894: 3.8
- // NB: reusing part of dr407 test
+namespace cwg1894 { // cwg1894: 3.8
+ // NB: reusing part of cwg407 test
namespace A {
struct S {};
}
diff --git a/clang/test/CXX/drs/dr19xx.cpp b/clang/test/CXX/drs/dr19xx.cpp
index f8c1581f08540e..3e4f82813f51b0 100644
--- a/clang/test/CXX/drs/dr19xx.cpp
+++ b/clang/test/CXX/drs/dr19xx.cpp
@@ -8,13 +8,13 @@
namespace std { struct type_info; }
-namespace dr1902 { // dr1902: 3.7
+namespace cwg1902 { // cwg1902: 3.7
struct A {};
struct B {
- B(A); // #dr1902-B-A
- B() = delete; // #dr1902-B-ctor
+ B(A); // #cwg1902-B-A
+ B() = delete; // #cwg1902-B-ctor
// cxx98-error at -1 {{deleted function definitions are a C++11 extension}}
- B(const B&) = delete; // #dr1902-B-copy-ctor
+ B(const B&) = delete; // #cwg1902-B-copy-ctor
// cxx98-error at -1 {{deleted function definitions are a C++11 extension}}
operator A();
};
@@ -22,19 +22,19 @@ namespace dr1902 { // dr1902: 3.7
extern B b1;
B b2(b1);
// expected-error at -1 {{call to deleted constructor of 'B'}}
- // expected-note@#dr1902-B-copy-ctor {{'B' has been explicitly marked deleted here}}
+ // expected-note@#cwg1902-B-copy-ctor {{'B' has been explicitly marked deleted here}}
#if __cplusplus >= 201103L
// This is ambiguous, even though calling the B(const B&) constructor would
// both directly and indirectly call a deleted function.
B b({});
// since-cxx11-error at -1 {{call to constructor of 'B' is ambiguous}}
- // since-cxx11-note@#dr1902-B-A {{candidate constructor}}
- // since-cxx11-note@#dr1902-B-copy-ctor {{candidate constructor has been explicitly deleted}}
+ // since-cxx11-note@#cwg1902-B-A {{candidate constructor}}
+ // since-cxx11-note@#cwg1902-B-copy-ctor {{candidate constructor has been explicitly deleted}}
#endif
}
-namespace dr1903 { // dr1903: 2.7
+namespace cwg1903 { // cwg1903: 2.7
namespace A {
struct a {};
int a;
@@ -59,7 +59,7 @@ namespace dr1903 { // dr1903: 2.7
}
}
-namespace dr1909 { // dr1909: 3.7
+namespace cwg1909 { // cwg1909: 3.7
struct A {
template<typename T> struct A {};
// expected-error at -1 {{member 'A' has the same name as its class}}
@@ -80,7 +80,7 @@ namespace dr1909 { // dr1909: 3.7
};
}
-namespace dr1940 { // dr1940: 3.5
+namespace cwg1940 { // cwg1940: 3.5
#if __cplusplus >= 201103L
static union {
static_assert(true, ""); // ok
@@ -91,7 +91,7 @@ static union {
#endif
}
-namespace dr1941 { // dr1941: 3.9
+namespace cwg1941 { // cwg1941: 3.9
#if __cplusplus >= 201402L
template<typename X>
struct base {
@@ -121,7 +121,7 @@ derived d2(42, 9);
#endif
}
-namespace dr1947 { // dr1947: 3.5
+namespace cwg1947 { // cwg1947: 3.5
#if __cplusplus >= 201402L
unsigned o = 0'01; // ok
unsigned b = 0b'01;
@@ -132,26 +132,26 @@ unsigned x = 0x'01;
}
#if __cplusplus >= 201103L
-// dr1948: 3.5
+// cwg1948: 3.5
// FIXME: This diagnostic could be improved.
void *operator new(__SIZE_TYPE__) noexcept { return nullptr; }
// since-cxx11-error at -1 {{exception specification in declaration does not match previous declaration}}
#endif
-namespace dr1959 { // dr1959: 3.9
+namespace cwg1959 { // cwg1959: 3.9
#if __cplusplus >= 201103L
struct b;
struct c;
struct a {
a() = default;
- a(const a &) = delete; // #dr1959-copy-ctor
+ a(const a &) = delete; // #cwg1959-copy-ctor
a(const b &) = delete; // not inherited
- a(c &&) = delete; // #dr1959-move-ctor
- template<typename T> a(T) = delete; // #dr1959-temp-ctor
+ a(c &&) = delete; // #cwg1959-move-ctor
+ template<typename T> a(T) = delete; // #cwg1959-temp-ctor
};
- struct b : a { // #dr1959-b
- using a::a; // #dr1959-using-a
+ struct b : a { // #cwg1959-b
+ using a::a; // #cwg1959-using-a
};
a x;
@@ -160,15 +160,15 @@ namespace dr1959 { // dr1959: 3.9
// where the base class is reference-related to the argument type.
b y = x;
// since-cxx11-error at -1 {{no viable conversion from 'a' to 'b'}}
- // since-cxx11-note@#dr1959-move-ctor {{candidate inherited constructor not viable: no known conversion from 'a' to 'c &&' for 1st argument}}
- // since-cxx11-note@#dr1959-using-a {{constructor from base class 'a' inherited here}}
- // since-cxx11-note@#dr1959-b {{candidate constructor (the implicit copy constructor) not viable: cannot bind base class object of type 'a' to derived class reference 'const b &' for 1st argument}}
- // since-cxx11-note@#dr1959-temp-ctor {{candidate template ignored: instantiation would take its own class type by value}}
- // since-cxx11-note@#dr1959-using-a {{constructor from base class 'a' inherited here}}
+ // since-cxx11-note@#cwg1959-move-ctor {{candidate inherited constructor not viable: no known conversion from 'a' to 'c &&' for 1st argument}}
+ // since-cxx11-note@#cwg1959-using-a {{constructor from base class 'a' inherited here}}
+ // since-cxx11-note@#cwg1959-b {{candidate constructor (the implicit copy constructor) not viable: cannot bind base class object of type 'a' to derived class reference 'const b &' for 1st argument}}
+ // since-cxx11-note@#cwg1959-temp-ctor {{candidate template ignored: instantiation would take its own class type by value}}
+ // since-cxx11-note@#cwg1959-using-a {{constructor from base class 'a' inherited here}}
b z = z;
// since-cxx11-error at -1 {{call to implicitly-deleted copy constructor of 'b'}}
- // since-cxx11-note@#dr1959-b {{copy constructor of 'b' is implicitly deleted because base class 'a' has a deleted copy constructor}}
- // since-cxx11-note@#dr1959-copy-ctor {{'a' has been explicitly marked deleted here}}
+ // since-cxx11-note@#cwg1959-b {{copy constructor of 'b' is implicitly deleted because base class 'a' has a deleted copy constructor}}
+ // since-cxx11-note@#cwg1959-copy-ctor {{'a' has been explicitly marked deleted here}}
struct c : a {
using a::a;
@@ -181,7 +181,7 @@ namespace dr1959 { // dr1959: 3.9
#endif
}
-namespace dr1960 { // dr1960: no
+namespace cwg1960 { // cwg1960: no
struct A {
void f() {}
protected:
@@ -202,7 +202,7 @@ using A::g;
};
}
-namespace dr1966 { // dr1966: 11
+namespace cwg1966 { // cwg1966: 11
#if __cplusplus >= 201103L
struct A {
enum E : int {1};
@@ -215,12 +215,12 @@ namespace dr1966 { // dr1966: 11
auto *p3 = true ? new enum G : int {};
// since-cxx11-error at -1 {{ISO C++ forbids forward references to 'enum' types}}
// since-cxx11-error at -2 {{allocation of incomplete type 'enum G'}}
- // since-cxx11-note at -3 {{forward declaration of 'dr1966::G'}}
+ // since-cxx11-note at -3 {{forward declaration of 'cwg1966::G'}}
auto h() -> enum E : int {};
// since-cxx11-error at -1 {{non-defining declaration of enumeration with a fixed underlying type is only permitted as a standalone declaration}}
enum X : enum Y : int {} {};
- // since-cxx11-error at -1 {{'dr1966::Y' cannot be defined in a type specifier}}
+ // since-cxx11-error at -1 {{'cwg1966::Y' cannot be defined in a type specifier}}
struct Q {
// FIXME: can we emit something nicer than that?
enum X : enum Y : int {} {};
@@ -231,9 +231,9 @@ namespace dr1966 { // dr1966: 11
#endif
}
-namespace dr1968 { // dr1968: no
+namespace cwg1968 { // cwg1968: no
#if __cplusplus >= 201103L
- // FIXME: According to DR1968, both of these should be considered
+ // FIXME: According to CWG1968, both of these should be considered
// non-constant.
static_assert(&typeid(int) == &typeid(int), "");
@@ -242,7 +242,7 @@ namespace dr1968 { // dr1968: no
#endif
}
-namespace dr1991 { // dr1991: 3.9
+namespace cwg1991 { // cwg1991: 3.9
#if __cplusplus >= 201103L
struct A {
A(int, int) = delete;
@@ -260,4 +260,4 @@ namespace dr1991 { // dr1991: 3.9
#endif
}
-// dr1994: dup 529
+// cwg1994: dup 529
diff --git a/clang/test/CXX/drs/dr1xx.cpp b/clang/test/CXX/drs/dr1xx.cpp
index d55033cef1b645..5b497dda047d6a 100644
--- a/clang/test/CXX/drs/dr1xx.cpp
+++ b/clang/test/CXX/drs/dr1xx.cpp
@@ -5,61 +5,61 @@
// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-unknown %s -verify=expected,since-cxx11,since-cxx17 -fexceptions -fcxx-exceptions -pedantic-errors
// RUN: %clang_cc1 -std=c++23 -triple x86_64-unknown-unknown %s -verify=expected,since-cxx11,since-cxx17 -fexceptions -fcxx-exceptions -pedantic-errors
-namespace dr100 { // dr100: yes
- template<const char (*)[4]> struct A {}; // #dr100-A
- template<const char (&)[4]> struct B {}; // #dr100-B
- template<const char *> struct C {}; // #dr100-C
- template<const char &> struct D {}; // #dr100-D
- A<&"foo"> a; // #dr100-a
- // cxx98-14-error@#dr100-a {{non-type template argument does not refer to any declaration}}
- // cxx98-14-note@#dr100-A {{template parameter is declared here}}
- // since-cxx17-error@#dr100-a {{pointer to string literal is not allowed in a template argument}}
- B<"bar"> b; // #dr100-b
- // cxx98-14-error@#dr100-b {{non-type template argument does not refer to any declaration}}
- // cxx98-14-note@#dr100-B {{template parameter is declared here}}
- // since-cxx17-error@#dr100-b {{reference to string literal is not allowed in a template argument}}
- C<"baz"> c; // #dr100-c
- // cxx98-14-error@#dr100-c {{non-type template argument does not refer to any declaration}}
- // cxx98-14-note@#dr100-C {{template parameter is declared here}}
- // since-cxx17-error@#dr100-c {{pointer to subobject of string literal is not allowed in a template argument}}
- D<*"quux"> d; // #dr100-d
- // cxx98-14-error@#dr100-d {{non-type template argument does not refer to any declaration}}
- // cxx98-14-note@#dr100-D {{template parameter is declared here}}
- // since-cxx17-error@#dr100-d {{reference to subobject of string literal is not allowed in a template argument}}
-}
-
-namespace dr101 { // dr101: 3.5
- extern "C" void dr101_f();
+namespace cwg100 { // cwg100: yes
+ template<const char (*)[4]> struct A {}; // #cwg100-A
+ template<const char (&)[4]> struct B {}; // #cwg100-B
+ template<const char *> struct C {}; // #cwg100-C
+ template<const char &> struct D {}; // #cwg100-D
+ A<&"foo"> a; // #cwg100-a
+ // cxx98-14-error@#cwg100-a {{non-type template argument does not refer to any declaration}}
+ // cxx98-14-note@#cwg100-A {{template parameter is declared here}}
+ // since-cxx17-error@#cwg100-a {{pointer to string literal is not allowed in a template argument}}
+ B<"bar"> b; // #cwg100-b
+ // cxx98-14-error@#cwg100-b {{non-type template argument does not refer to any declaration}}
+ // cxx98-14-note@#cwg100-B {{template parameter is declared here}}
+ // since-cxx17-error@#cwg100-b {{reference to string literal is not allowed in a template argument}}
+ C<"baz"> c; // #cwg100-c
+ // cxx98-14-error@#cwg100-c {{non-type template argument does not refer to any declaration}}
+ // cxx98-14-note@#cwg100-C {{template parameter is declared here}}
+ // since-cxx17-error@#cwg100-c {{pointer to subobject of string literal is not allowed in a template argument}}
+ D<*"quux"> d; // #cwg100-d
+ // cxx98-14-error@#cwg100-d {{non-type template argument does not refer to any declaration}}
+ // cxx98-14-note@#cwg100-D {{template parameter is declared here}}
+ // since-cxx17-error@#cwg100-d {{reference to subobject of string literal is not allowed in a template argument}}
+}
+
+namespace cwg101 { // cwg101: 3.5
+ extern "C" void cwg101_f();
typedef unsigned size_t;
namespace X {
- extern "C" void dr101_f();
+ extern "C" void cwg101_f();
typedef unsigned size_t;
}
- using X::dr101_f;
+ using X::cwg101_f;
using X::size_t;
- extern "C" void dr101_f();
+ extern "C" void cwg101_f();
typedef unsigned size_t;
}
-namespace dr102 { // dr102: yes
+namespace cwg102 { // cwg102: yes
namespace A {
template<typename T> T f(T a, T b) { return a + b; }
// expected-error at -1 {{call to function 'operator+' that is neither visible in the template definition nor found by argument-dependent lookup}}
- // expected-note@#dr102-instantiation {{in instantiation of function template specialization 'dr102::A::f<dr102::B::S>' requested here}}
- // expected-note@#dr102-operator-plus {{'operator+' should be declared prior to the call site or in namespace 'dr102::B'}}
+ // expected-note@#cwg102-instantiation {{in instantiation of function template specialization 'cwg102::A::f<cwg102::B::S>' requested here}}
+ // expected-note@#cwg102-operator-plus {{'operator+' should be declared prior to the call site or in namespace 'cwg102::B'}}
}
namespace B {
struct S {};
}
- B::S operator+(B::S, B::S); // #dr102-operator-plus
- template B::S A::f(B::S, B::S); // #dr102-instantiation
+ B::S operator+(B::S, B::S); // #cwg102-operator-plus
+ template B::S A::f(B::S, B::S); // #cwg102-instantiation
}
-// dr103: na
-// dr104: na lib
-// dr105: na
+// cwg103: na
+// cwg104: na lib
+// cwg105: na
-namespace dr106 { // dr106: sup 540
+namespace cwg106 { // cwg106: sup 540
typedef int &r1;
typedef r1 &r1;
typedef const r1 r1;
@@ -75,12 +75,12 @@ namespace dr106 { // dr106: sup 540
// expected-warning at -1 {{'const' qualifier on reference type 'r2' (aka 'const int &') has no effect}}
}
-namespace dr107 { // dr107: yes
+namespace cwg107 { // cwg107: yes
struct S {};
extern "C" S operator+(S, S) { return S(); }
}
-namespace dr108 { // dr108: 2.9
+namespace cwg108 { // cwg108: 2.9
template<typename T> struct A {
struct B { typedef int X; };
B::X x;
@@ -91,7 +91,7 @@ namespace dr108 { // dr108: 2.9
template<> struct A<int>::B { int X; };
}
-namespace dr109 { // dr109: yes
+namespace cwg109 { // cwg109: yes
struct A { template<typename T> void f(T); };
template<typename T> struct B : T {
using T::template f;
@@ -108,37 +108,37 @@ namespace dr109 { // dr109: yes
};
}
-namespace dr111 { // dr111: dup 535
+namespace cwg111 { // cwg111: dup 535
struct A { A(); A(volatile A&, int = 0); A(A&, const char * = "foo"); };
- struct B : A { B(); }; // #dr111-B
+ struct B : A { B(); }; // #cwg111-B
const B b1;
B b2(b1);
// expected-error at -1 {{no matching constructor for initialization of 'B'}}
- // expected-note@#dr111-B {{candidate constructor (the implicit copy constructor) not viable: 1st argument ('const B') would lose const qualifier}}
- // expected-note@#dr111-B {{candidate constructor not viable: requires 0 arguments, but 1 was provided}}
+ // expected-note@#cwg111-B {{candidate constructor (the implicit copy constructor) not viable: 1st argument ('const B') would lose const qualifier}}
+ // expected-note@#cwg111-B {{candidate constructor not viable: requires 0 arguments, but 1 was provided}}
}
-namespace dr112 { // dr112: yes
+namespace cwg112 { // cwg112: yes
struct T { int n; };
typedef T Arr[1];
- const T a1[1] = {}; // #dr112-a1
+ const T a1[1] = {}; // #cwg112-a1
volatile T a2[1] = {};
- const Arr a3 = {}; // #dr112-a3
+ const Arr a3 = {}; // #cwg112-a3
volatile Arr a4 = {};
template<const volatile T*> struct X {};
// FIXME: Test this somehow in C++11 and on.
X<a1> x1;
// cxx98-error at -1 {{non-type template argument referring to object 'a1' with internal linkage is a C++11 extension}}
- // cxx98-note@#dr112-a1 {{non-type template argument refers to object here}}
+ // cxx98-note@#cwg112-a1 {{non-type template argument refers to object here}}
X<a2> x2;
X<a3> x3;
// cxx98-error at -1 {{non-type template argument referring to object 'a3' with internal linkage is a C++11 extension}}
- // cxx98-note@#dr112-a3 {{non-type template argument refers to object here}}
+ // cxx98-note@#cwg112-a3 {{non-type template argument refers to object here}}
X<a4> x4;
}
-namespace dr113 { // dr113: yes
+namespace cwg113 { // cwg113: yes
extern void (*p)();
void f() {
no_such_function();
@@ -149,50 +149,50 @@ namespace dr113 { // dr113: yes
void (*p)() = &g;
}
-namespace dr114 { // dr114: yes
+namespace cwg114 { // cwg114: yes
struct A {
- virtual void f(int) = 0; // #dr114-A-f
+ virtual void f(int) = 0; // #cwg114-A-f
};
struct B : A {
template<typename T> void f(T);
void g() { f(0); }
} b;
// expected-error at -1 {{variable type 'struct B' is an abstract class}}
- // expected-note@#dr114-A-f {{unimplemented pure virtual method 'f' in 'B'}}
+ // expected-note@#cwg114-A-f {{unimplemented pure virtual method 'f' in 'B'}}
}
-namespace dr115 { // dr115: 3.0
- template<typename T> int f(T); // #dr115-f
- template<typename T> int g(T); // #dr115-g
- template<typename T> int g(T, int); // #dr115-g-int
+namespace cwg115 { // cwg115: 3.0
+ template<typename T> int f(T); // #cwg115-f
+ template<typename T> int g(T); // #cwg115-g
+ template<typename T> int g(T, int); // #cwg115-g-int
int k1 = f(&f);
// expected-error at -1 {{no matching function for call to 'f'}}
- // expected-note@#dr115-f {{candidate template ignored: couldn't infer template argument 'T'}}
+ // expected-note@#cwg115-f {{candidate template ignored: couldn't infer template argument 'T'}}
int k2 = f(&f<int>);
int k3 = f(&g<int>);
// expected-error at -1 {{no matching function for call to 'f'}}
- // expected-note@#dr115-f {{candidate template ignored: couldn't infer template argument 'T'}}
+ // expected-note@#cwg115-f {{candidate template ignored: couldn't infer template argument 'T'}}
void h() {
(void)&f;
// expected-error at -1 {{address of overloaded function 'f' cannot be cast to type 'void'}}
- // expected-note@#dr115-f {{candidate function template}}
+ // expected-note@#cwg115-f {{candidate function template}}
(void)&f<int>;
(void)&g<int>;
// expected-error at -1 {{address of overloaded function 'g' cannot be cast to type 'void'}}
- // expected-note@#dr115-g-int {{candidate function template}}
- // expected-note@#dr115-g {{candidate function template}}
+ // expected-note@#cwg115-g-int {{candidate function template}}
+ // expected-note@#cwg115-g {{candidate function template}}
&f;
// expected-error at -1 {{reference to overloaded function could not be resolved; did you mean to call it?}}
- // expected-note@#dr115-f {{possible target for call}}
+ // expected-note@#cwg115-f {{possible target for call}}
&f<int>;
// expected-warning at -1 {{expression result unused}}
&g<int>;
// expected-error at -1 {{reference to overloaded function could not be resolved; did you mean to call it?}}
- // expected-note@#dr115-g-int {{possible target for call}}
- // expected-note@#dr115-g {{possible target for call}}
+ // expected-note@#cwg115-g-int {{possible target for call}}
+ // expected-note@#cwg115-g {{possible target for call}}
}
struct S {
@@ -251,43 +251,43 @@ namespace dr115 { // dr115: 3.0
#if __cplusplus >= 201103L
// Special case kicks in only if a template argument list is specified.
- template<typename T=int> void with_default(); // #dr115-with-default
+ template<typename T=int> void with_default(); // #cwg115-with-default
int k10 = f(&with_default);
// expected-error at -1 {{no matching function for call to 'f'}}
- // expected-note@#dr115-f {{candidate template ignored: couldn't infer template argument 'T'}}
+ // expected-note@#cwg115-f {{candidate template ignored: couldn't infer template argument 'T'}}
int k11 = f(&with_default<>);
void k() {
(void)&with_default;
// expected-error at -1 {{address of overloaded function 'with_default' cannot be cast to type 'void'}}
- // expected-note@#dr115-with-default {{candidate function template}}
+ // expected-note@#cwg115-with-default {{candidate function template}}
(void)&with_default<>;
&with_default;
// expected-error at -1 {{reference to overloaded function could not be resolved; did you mean to call it?}}
- // expected-note@#dr115-with-default {{possible target for call}}
+ // expected-note@#cwg115-with-default {{possible target for call}}
&with_default<>;
// expected-warning at -1 {{expression result unused}}
}
#endif
}
-namespace dr116 { // dr116: yes
+namespace cwg116 { // cwg116: yes
template<int> struct A {};
- template<int N> void f(A<N>) {} // #dr116-f-N
+ template<int N> void f(A<N>) {} // #cwg116-f-N
template<int M> void f(A<M>) {}
// expected-error at -1 {{redefinition of 'f'}}
- // expected-note@#dr116-f-N {{previous definition is here}}
- template<typename T> void f(A<sizeof(T)>) {} // #dr116-f-T
+ // expected-note@#cwg116-f-N {{previous definition is here}}
+ template<typename T> void f(A<sizeof(T)>) {} // #cwg116-f-T
template<typename U> void f(A<sizeof(U)>) {}
// expected-error at -1 {{redefinition of 'f'}}
- // expected-note@#dr116-f-T {{previous definition is here}}
+ // expected-note@#cwg116-f-T {{previous definition is here}}
}
-// dr117: na
-// dr118 is in dr118.cpp
-// dr119: na
-// dr120: na
+// cwg117: na
+// cwg118 is in cwg118.cpp
+// cwg119: na
+// cwg120: na
-namespace dr121 { // dr121: yes
+namespace cwg121 { // cwg121: yes
struct X {
template<typename T> struct Y {};
};
@@ -300,32 +300,32 @@ namespace dr121 { // dr121: yes
Z<X> z;
}
-namespace dr122 { // dr122: yes
+namespace cwg122 { // cwg122: yes
template<typename T> void f();
void g() { f<int>(); }
}
-// dr123: na
-// dr124 is in dr124.cpp
+// cwg123: na
+// cwg124 is in cwg124.cpp
-// dr125: yes
-struct dr125_A { struct dr125_B {}; }; // #dr125_B
-dr125_A::dr125_B dr125_C();
-namespace dr125_B { dr125_A dr125_C(); }
-namespace dr125 {
+// cwg125: yes
+struct cwg125_A { struct cwg125_B {}; }; // #cwg125_B
+cwg125_A::cwg125_B cwg125_C();
+namespace cwg125_B { cwg125_A cwg125_C(); }
+namespace cwg125 {
struct X {
- friend dr125_A::dr125_B (::dr125_C)(); // ok
- friend dr125_A (::dr125_B::dr125_C)(); // ok
- friend dr125_A::dr125_B::dr125_C(); // #dr125_C
- // expected-error@#dr125_C {{missing return type for function 'dr125_C'; did you mean the constructor name 'dr125_B'?}}
- // cxx98-error@#dr125_C {{'dr125_B' is missing exception specification 'throw()'}}
- // cxx98-note@#dr125_B {{previous declaration is here}}
- // since-cxx11-error@#dr125_C {{'dr125_B' is missing exception specification 'noexcept'}}
- // since-cxx11-note@#dr125_B {{previous declaration is here}}
+ friend cwg125_A::cwg125_B (::cwg125_C)(); // ok
+ friend cwg125_A (::cwg125_B::cwg125_C)(); // ok
+ friend cwg125_A::cwg125_B::cwg125_C(); // #cwg125_C
+ // expected-error@#cwg125_C {{missing return type for function 'cwg125_C'; did you mean the constructor name 'cwg125_B'?}}
+ // cxx98-error@#cwg125_C {{'cwg125_B' is missing exception specification 'throw()'}}
+ // cxx98-note@#cwg125_B {{previous declaration is here}}
+ // since-cxx11-error@#cwg125_C {{'cwg125_B' is missing exception specification 'noexcept'}}
+ // since-cxx11-note@#cwg125_B {{previous declaration is here}}
};
}
-namespace dr126 { // dr126: partial
+namespace cwg126 { // cwg126: partial
// FIXME: We do not yet generate correct code for this change:
// eg:
// catch (void*&) should catch void* but not int*
@@ -350,23 +350,23 @@ namespace dr126 { // dr126: partial
struct A {
virtual void cp() throw(C*);
virtual void dp() throw(C*);
- virtual void ep() throw(C*); // #dr126-ep
- virtual void fp() throw(C*); // #dr126-fp
+ virtual void ep() throw(C*); // #cwg126-ep
+ virtual void fp() throw(C*); // #cwg126-fp
virtual void gp() throw(C*);
- virtual void hp() throw(C*); // #dr126-hp
+ virtual void hp() throw(C*); // #cwg126-hp
virtual void cr() throw(C&);
virtual void dr() throw(C&);
- virtual void er() throw(C&); // #dr126-er
- virtual void fr() throw(C&); // #dr126-fr
+ virtual void er() throw(C&); // #cwg126-er
+ virtual void fr() throw(C&); // #cwg126-fr
virtual void gr() throw(C&);
- virtual void hr() throw(C&); // #dr126-hr
+ virtual void hr() throw(C&); // #cwg126-hr
virtual void pv() throw(void*);
virtual void np() throw(C*);
virtual void npm() throw(int C::*);
- virtual void nr() throw(C*&); // #dr126-nr
+ virtual void nr() throw(C*&); // #cwg126-nr
virtual void ncr() throw(C*const&);
virtual void ref1() throw(C *const&);
@@ -374,36 +374,36 @@ namespace dr126 { // dr126: partial
virtual void v() throw(int);
virtual void w() throw(const int);
- virtual void x() throw(int*); // #dr126-x
+ virtual void x() throw(int*); // #cwg126-x
virtual void y() throw(const int*);
- virtual void z() throw(int); // #dr126-z
+ virtual void z() throw(int); // #cwg126-z
};
struct B : A {
virtual void cp() throw(C*);
virtual void dp() throw(D*);
virtual void ep() throw(E*);
// cxx98-14-error at -1 {{exception specification of overriding function is more lax than base version}}
- // cxx98-14-note@#dr126-ep {{overridden virtual function is here}}
+ // cxx98-14-note@#cwg126-ep {{overridden virtual function is here}}
virtual void fp() throw(F*);
// cxx98-14-error at -1 {{exception specification of overriding function is more lax than base version}}
- // cxx98-14-note@#dr126-fp {{overridden virtual function is here}}
+ // cxx98-14-note@#cwg126-fp {{overridden virtual function is here}}
virtual void gp() throw(G*);
virtual void hp() throw(H*);
// cxx98-14-error at -1 {{exception specification of overriding function is more lax than base version}}
- // cxx98-14-note@#dr126-hp {{overridden virtual function is here}}
+ // cxx98-14-note@#cwg126-hp {{overridden virtual function is here}}
virtual void cr() throw(C&);
virtual void dr() throw(D&);
virtual void er() throw(E&);
// cxx98-14-error at -1 {{exception specification of overriding function is more lax than base version}}
- // cxx98-14-note@#dr126-er {{overridden virtual function is here}}
+ // cxx98-14-note@#cwg126-er {{overridden virtual function is here}}
virtual void fr() throw(F&);
// cxx98-14-error at -1 {{exception specification of overriding function is more lax than base version}}
- // cxx98-14-note@#dr126-fr {{overridden virtual function is here}}
+ // cxx98-14-note@#cwg126-fr {{overridden virtual function is here}}
virtual void gr() throw(G&);
virtual void hr() throw(H&);
// cxx98-14-error at -1 {{exception specification of overriding function is more lax than base version}}
- // cxx98-14-note@#dr126-hr {{overridden virtual function is here}}
+ // cxx98-14-note@#cwg126-hr {{overridden virtual function is here}}
virtual void pv() throw(C*);
@@ -413,7 +413,7 @@ namespace dr126 { // dr126: partial
virtual void npm() throw(nullptr_t&);
virtual void nr() throw(nullptr_t);
// cxx11-14-error at -1 {{exception specification of overriding function is more lax than base version}}
- // cxx11-14-note@#dr126-nr {{overridden virtual function is here}}
+ // cxx11-14-note@#cwg126-nr {{overridden virtual function is here}}
virtual void ncr() throw(nullptr_t);
#endif // __cplusplus >= 201103L
@@ -424,11 +424,11 @@ namespace dr126 { // dr126: partial
virtual void w() throw(int);
virtual void x() throw(const int*);
// cxx98-14-error at -1 {{exception specification of overriding function is more lax than base version}}
- // cxx98-14-note@#dr126-x {{overridden virtual function is here}}
+ // cxx98-14-note@#cwg126-x {{overridden virtual function is here}}
virtual void y() throw(int*); // ok
virtual void z() throw(long);
// cxx98-14-error at -1 {{exception specification of overriding function is more lax than base version}}
- // cxx98-14-note@#dr126-z {{overridden virtual function is here}}
+ // cxx98-14-note@#cwg126-z {{overridden virtual function is here}}
};
#endif // __cplusplus <= 201402L
void f() throw(int);
@@ -436,37 +436,37 @@ namespace dr126 { // dr126: partial
// since-cxx17-note at -2 {{use 'noexcept(false)' instead}}
}
-namespace dr127 { // dr127: 2.9
+namespace cwg127 { // cwg127: 2.9
__extension__ typedef __decltype(sizeof(0)) size_t;
template<typename T> struct A {
A() { throw 0; }
void *operator new(size_t, const char * = 0);
- void operator delete(void *, const char *) { T::error; } // #dr127-delete-const-char
- // expected-error@#dr127-delete-const-char {{type 'void' cannot be used prior to '::' because it has no members}}
- // expected-note@#dr127-p {{in instantiation of member function 'dr127::A<void>::operator delete' requested here}}
- // expected-error@#dr127-delete-const-char {{type 'int' cannot be used prior to '::' because it has no members}}
- // expected-note@#dr127-q {{in instantiation of member function 'dr127::A<int>::operator delete' requested here}}
+ void operator delete(void *, const char *) { T::error; } // #cwg127-delete-const-char
+ // expected-error@#cwg127-delete-const-char {{type 'void' cannot be used prior to '::' because it has no members}}
+ // expected-note@#cwg127-p {{in instantiation of member function 'cwg127::A<void>::operator delete' requested here}}
+ // expected-error@#cwg127-delete-const-char {{type 'int' cannot be used prior to '::' because it has no members}}
+ // expected-note@#cwg127-q {{in instantiation of member function 'cwg127::A<int>::operator delete' requested here}}
void operator delete(void *) { T::error; }
};
- A<void> *p = new A<void>; // #dr127-p
- A<int> *q = new ("") A<int>; // #dr127-q
+ A<void> *p = new A<void>; // #cwg127-p
+ A<int> *q = new ("") A<int>; // #cwg127-q
}
-namespace dr128 { // dr128: yes
+namespace cwg128 { // cwg128: yes
enum E1 { e1 } x = e1;
enum E2 { e2 } y = static_cast<E2>(x), z = static_cast<E2>(e1);
}
-// dr129: dup 616
-// dr130: na
+// cwg129: dup 616
+// cwg130: na
-namespace dr131 { // dr131: sup P1949
+namespace cwg131 { // cwg131: sup P1949
const char *a_with_\u0e8c = "\u0e8c";
const char *b_with_\u0e8d = "\u0e8d";
const char *c_with_\u0e8e = "\u0e8e";
}
-namespace dr132 { // dr132: no
+namespace cwg132 { // cwg132: no
void f() {
extern struct {} x; // ok
extern struct S {} y; // FIXME: This is invalid.
@@ -474,10 +474,10 @@ namespace dr132 { // dr132: no
static enum { E } e;
}
-// dr133: dup 87
-// dr134: na
+// cwg133: dup 87
+// cwg134: na
-namespace dr135 { // dr135: yes
+namespace cwg135 { // cwg135: yes
struct A {
A f(A a) { return a; }
friend A g(A a) { return a; }
@@ -485,55 +485,55 @@ namespace dr135 { // dr135: yes
};
}
-namespace dr136 { // dr136: 3.4
- void f(int, int, int = 0); // #dr136-f
- void g(int, int, int); // #dr136-g
+namespace cwg136 { // cwg136: 3.4
+ void f(int, int, int = 0); // #cwg136-f
+ void g(int, int, int); // #cwg136-g
struct A {
friend void f(int, int = 0, int);
// expected-error at -1 {{friend declaration specifying a default argument must be the only declaration}}
- // expected-note@#dr136-f {{previous declaration is here}}
+ // expected-note@#cwg136-f {{previous declaration is here}}
friend void g(int, int, int = 0);
// expected-error at -1 {{friend declaration specifying a default argument must be the only declaration}}
- // expected-note@#dr136-g {{previous declaration is here}}
+ // expected-note@#cwg136-g {{previous declaration is here}}
friend void h(int, int, int = 0);
// expected-error at -1 {{friend declaration specifying a default argument must be a definition}}
- friend void i(int, int, int = 0) {} // #dr136-A-i
+ friend void i(int, int, int = 0) {} // #cwg136-A-i
friend void j(int, int, int = 0) {}
operator int();
};
void i(int, int, int);
// expected-error at -1 {{friend declaration specifying a default argument must be the only declaration}}
- // expected-note@#dr136-A-i {{previous declaration is here}}
+ // expected-note@#cwg136-A-i {{previous declaration is here}}
void q() {
j(A(), A()); // ok, has default argument
}
- extern "C" void k(int, int, int, int); // #dr136-k
+ extern "C" void k(int, int, int, int); // #cwg136-k
namespace NSA {
struct A {
- friend void dr136::k(int, int, int, int = 0);
+ friend void cwg136::k(int, int, int, int = 0);
// expected-error at -1 {{friend declaration specifying a default argument must be the only declaration}}
- // expected-note@#dr136-k {{previous declaration is here}}
+ // expected-note@#cwg136-k {{previous declaration is here}}
};
}
namespace NSB {
struct A {
- friend void dr136::k(int, int, int = 0, int); // #dr136-friend-k
- // expected-error@#dr136-friend-k {{friend declaration specifying a default argument must be the only declaration}}
- // expected-note@#dr136-k {{previous declaration is here}}
- // expected-error@#dr136-friend-k {{missing default argument on parameter}}
+ friend void cwg136::k(int, int, int = 0, int); // #cwg136-friend-k
+ // expected-error@#cwg136-friend-k {{friend declaration specifying a default argument must be the only declaration}}
+ // expected-note@#cwg136-k {{previous declaration is here}}
+ // expected-error@#cwg136-friend-k {{missing default argument on parameter}}
};
}
struct B {
- void f(int); // #dr136-B-f
+ void f(int); // #cwg136-B-f
};
struct C {
friend void B::f(int = 0);
// expected-error at -1 {{friend declaration specifying a default argument must be the only declaration}}
- // expected-note@#dr136-B-f {{previous declaration is here}}
+ // expected-note@#cwg136-B-f {{previous declaration is here}}
};
}
-namespace dr137 { // dr137: yes
+namespace cwg137 { // cwg137: yes
extern void *p;
extern const void *cp;
extern volatile void *vp;
@@ -557,13 +557,13 @@ namespace dr137 { // dr137: yes
const volatile int *cvqcv = static_cast<const volatile int*>(cvp);
}
-namespace dr139 { // dr139: yes
+namespace cwg139 { // cwg139: yes
namespace example1 {
- typedef int f; // #dr139-typedef-f
+ typedef int f; // #cwg139-typedef-f
struct A {
friend void f(A &);
// expected-error at -1 {{redefinition of 'f' as
diff erent kind of symbol}}
- // expected-note@#dr139-typedef-f {{previous definition is here}}
+ // expected-note@#cwg139-typedef-f {{previous definition is here}}
};
}
@@ -579,34 +579,34 @@ namespace dr139 { // dr139: yes
}
}
-namespace dr140 { // dr140: yes
- void f(int *const) {} // #dr140-f-first
+namespace cwg140 { // cwg140: yes
+ void f(int *const) {} // #cwg140-f-first
void f(int[3]) {}
// expected-error at -1 {{redefinition of 'f'}}
- // expected-note@#dr140-f-first {{previous definition is here}}
+ // expected-note@#cwg140-f-first {{previous definition is here}}
void g(const int);
void g(int n) { n = 2; }
}
-namespace dr141 { // dr141: 3.1
+namespace cwg141 { // cwg141: 3.1
template<typename T> void f();
- template<typename T> struct S { int n; }; // #dr141-S
+ template<typename T> struct S { int n; }; // #cwg141-S
struct A : S<int> {
template<typename T> void f();
- template<typename T> struct S {}; // #dr141-A-S
+ template<typename T> struct S {}; // #cwg141-A-S
} a;
struct B : S<int> {} b;
void g() {
a.f<int>();
- (void)a.S<int>::n; // #dr141-a
- // cxx98-error@#dr141-a {{lookup of 'S' in member access expression is ambiguous; using member of 'struct A'}}
- // cxx98-note@#dr141-A-S {{lookup in the object type 'struct A' refers here}}
- // cxx98-note@#dr141-S {{lookup from the current scope refers here}}
- // expected-error@#dr141-a {{no member named 'n' in 'dr141::A::S<int>'; did you mean '::dr141::S<int>::n'?}}
- // expected-note@#dr141-S {{'::dr141::S<int>::n' declared here}}
+ (void)a.S<int>::n; // #cwg141-a
+ // cxx98-error@#cwg141-a {{lookup of 'S' in member access expression is ambiguous; using member of 'struct A'}}
+ // cxx98-note@#cwg141-A-S {{lookup in the object type 'struct A' refers here}}
+ // cxx98-note@#cwg141-S {{lookup from the current scope refers here}}
+ // expected-error@#cwg141-a {{no member named 'n' in 'cwg141::A::S<int>'; did you mean '::cwg141::S<int>::n'?}}
+ // expected-note@#cwg141-S {{'::cwg141::S<int>::n' declared here}}
// FIXME: we issue a useful diagnostic first, then some bogus ones.
b.f<int>();
- // expected-error at -1 {{no member named 'f' in 'dr141::B'}}
+ // expected-error at -1 {{no member named 'f' in 'cwg141::B'}}
// expected-error at -2 +{{}}
(void)b.S<int>::n;
}
@@ -630,60 +630,60 @@ namespace dr141 { // dr141: 3.1
void i() { C<X>().i(); } // ok!!
}
-namespace dr142 { // dr142: 2.8
- class B { // #dr142-B
+namespace cwg142 { // cwg142: 2.8
+ class B { // #cwg142-B
public:
- int mi; // #dr142-B-mi
- static int si; // #dr142-B-si
+ int mi; // #cwg142-B-mi
+ static int si; // #cwg142-B-si
};
- class D : private B { // #dr142-D
+ class D : private B { // #cwg142-D
};
class DD : public D {
void f();
};
void DD::f() {
mi = 3;
- // expected-error at -1 {{'mi' is a private member of 'dr142::B'}}
- // expected-note@#dr142-D {{constrained by private inheritance here}}
- // expected-note@#dr142-B-mi {{member is declared here}}
+ // expected-error at -1 {{'mi' is a private member of 'cwg142::B'}}
+ // expected-note@#cwg142-D {{constrained by private inheritance here}}
+ // expected-note@#cwg142-B-mi {{member is declared here}}
si = 3;
- // expected-error at -1 {{'si' is a private member of 'dr142::B'}}
- // expected-note@#dr142-D {{constrained by private inheritance here}}
- // expected-note@#dr142-B-si {{member is declared here}}
+ // expected-error at -1 {{'si' is a private member of 'cwg142::B'}}
+ // expected-note@#cwg142-D {{constrained by private inheritance here}}
+ // expected-note@#cwg142-B-si {{member is declared here}}
B b_old;
- // expected-error at -1 {{'B' is a private member of 'dr142::B'}}
- // expected-note@#dr142-D {{constrained by private inheritance here}}
- // expected-note@#dr142-B {{member is declared here}}
- dr142::B b;
+ // expected-error at -1 {{'B' is a private member of 'cwg142::B'}}
+ // expected-note@#cwg142-D {{constrained by private inheritance here}}
+ // expected-note@#cwg142-B {{member is declared here}}
+ cwg142::B b;
b.mi = 3;
b.si = 3;
B::si = 3;
- // expected-error at -1 {{'B' is a private member of 'dr142::B'}}
- // expected-note@#dr142-D {{constrained by private inheritance here}}
- // expected-note@#dr142-B {{member is declared here}}
- dr142::B::si = 3;
- B *bp1_old = this; // #dr142-bp1_old
- // expected-error@#dr142-bp1_old {{'B' is a private member of 'dr142::B'}}
- // expected-note@#dr142-D {{constrained by private inheritance here}}
- // expected-note@#dr142-B {{member is declared here}}
- // expected-error@#dr142-bp1_old {{cannot cast 'dr142::DD' to its private base class 'B'}}
- // expected-note@#dr142-D {{declared private here}}
- dr142::B *bp1 = this;
- // expected-error at -1 {{cannot cast 'dr142::DD' to its private base class 'dr142::B'}}
- // expected-note@#dr142-D {{declared private here}}
- B *bp2_old = (B*)this; // #dr142-bp2_old
- // expected-error@#dr142-bp2_old {{'B' is a private member of 'dr142::B'}}
- // expected-note@#dr142-D {{constrained by private inheritance here}}
- // expected-note@#dr142-B {{member is declared here}}
- // expected-error@#dr142-bp2_old {{'B' is a private member of 'dr142::B'}}
- // expected-note@#dr142-D {{constrained by private inheritance here}}
- // expected-note@#dr142-B {{member is declared here}}
- dr142::B *bp2 = (dr142::B*)this;
+ // expected-error at -1 {{'B' is a private member of 'cwg142::B'}}
+ // expected-note@#cwg142-D {{constrained by private inheritance here}}
+ // expected-note@#cwg142-B {{member is declared here}}
+ cwg142::B::si = 3;
+ B *bp1_old = this; // #cwg142-bp1_old
+ // expected-error@#cwg142-bp1_old {{'B' is a private member of 'cwg142::B'}}
+ // expected-note@#cwg142-D {{constrained by private inheritance here}}
+ // expected-note@#cwg142-B {{member is declared here}}
+ // expected-error@#cwg142-bp1_old {{cannot cast 'cwg142::DD' to its private base class 'B'}}
+ // expected-note@#cwg142-D {{declared private here}}
+ cwg142::B *bp1 = this;
+ // expected-error at -1 {{cannot cast 'cwg142::DD' to its private base class 'cwg142::B'}}
+ // expected-note@#cwg142-D {{declared private here}}
+ B *bp2_old = (B*)this; // #cwg142-bp2_old
+ // expected-error@#cwg142-bp2_old {{'B' is a private member of 'cwg142::B'}}
+ // expected-note@#cwg142-D {{constrained by private inheritance here}}
+ // expected-note@#cwg142-B {{member is declared here}}
+ // expected-error@#cwg142-bp2_old {{'B' is a private member of 'cwg142::B'}}
+ // expected-note@#cwg142-D {{constrained by private inheritance here}}
+ // expected-note@#cwg142-B {{member is declared here}}
+ cwg142::B *bp2 = (cwg142::B*)this;
bp2->mi = 3;
}
}
-namespace dr143 { // dr143: yes
+namespace cwg143 { // cwg143: yes
namespace A { struct X; }
namespace B { void f(A::X); }
namespace A {
@@ -695,7 +695,7 @@ namespace dr143 { // dr143: yes
}
}
-namespace dr145 { // dr145: yes
+namespace cwg145 { // cwg145: yes
void f(bool b) {
++b;
// cxx98-14-warning at -1 {{incrementing expression of type bool is deprecated and incompatible with C++17}}
@@ -706,7 +706,7 @@ namespace dr145 { // dr145: yes
}
}
-namespace dr147 { // dr147: yes
+namespace cwg147 { // cwg147: yes
namespace example1 {
template<typename> struct A {
template<typename T> A(T);
@@ -734,15 +734,15 @@ namespace dr147 { // dr147: yes
}
}
-namespace dr148 { // dr148: yes
+namespace cwg148 { // cwg148: yes
struct A { int A::*p; };
int check1[__is_pod(int(A::*)) ? 1 : -1];
int check2[__is_pod(A) ? 1 : -1];
}
-// dr149: na
+// cwg149: na
-namespace dr151 { // dr151: 3.1
+namespace cwg151 { // cwg151: 3.1
struct X {};
typedef int X::*p;
#if __cplusplus < 201103L
@@ -754,28 +754,28 @@ namespace dr151 { // dr151: 3.1
#undef fold
}
-namespace dr152 { // dr152: yes
+namespace cwg152 { // cwg152: yes
struct A {
- A(); // #dr152-A-ctor
- explicit A(const A&); // #dr152-A-explicit-ctor
+ A(); // #cwg152-A-ctor
+ explicit A(const A&); // #cwg152-A-explicit-ctor
};
A a1 = A();
// cxx98-14-error at -1 {{no matching constructor for initialization of 'A'}}
- // cxx98-14-note@#dr152-A-explicit-ctor {{explicit constructor is not a candidate}}
- // cxx98-14-note@#dr152-A-ctor {{candidate constructor not viable: requires 0 arguments, but 1 was provided}}
+ // cxx98-14-note@#cwg152-A-explicit-ctor {{explicit constructor is not a candidate}}
+ // cxx98-14-note@#cwg152-A-ctor {{candidate constructor not viable: requires 0 arguments, but 1 was provided}}
A a2((A()));
A &f();
A a3 = f();
// expected-error at -1 {{no matching constructor for initialization of 'A'}}
- // expected-note@#dr152-A-explicit-ctor {{explicit constructor is not a candidate}}
- // expected-note@#dr152-A-ctor {{candidate constructor not viable: requires 0 arguments, but 1 was provided}}
+ // expected-note@#cwg152-A-explicit-ctor {{explicit constructor is not a candidate}}
+ // expected-note@#cwg152-A-ctor {{candidate constructor not viable: requires 0 arguments, but 1 was provided}}
A a4(f());
}
-// dr153: na
+// cwg153: na
-namespace dr154 { // dr154: yes
+namespace cwg154 { // cwg154: yes
union { int a; };
// expected-error at -1 {{nonymous unions at namespace or global scope must be declared 'static'}}
namespace {
@@ -784,29 +784,29 @@ namespace dr154 { // dr154: yes
static union { int c; };
}
-namespace dr155 { // dr155: dup 632
+namespace cwg155 { // cwg155: dup 632
struct S { int n; } s = { { 1 } };
// expected-warning at -1 {{braces around scalar initializer}}
}
-// dr158 is in dr158.cpp
+// cwg158 is in cwg158.cpp
-namespace dr159 { // dr159: 3.5
+namespace cwg159 { // cwg159: 3.5
namespace X { void f(); }
void f();
- void dr159::f() {}
+ void cwg159::f() {}
// expected-warning at -1 {{extra qualification on member 'f'}}
- void dr159::X::f() {}
+ void cwg159::X::f() {}
}
-// dr160: na
+// cwg160: na
-namespace dr161 { // dr161: 3.1
+namespace cwg161 { // cwg161: 3.1
class A {
protected:
- struct B { int n; } b; // #dr161-B
+ struct B { int n; } b; // #cwg161-B
static B bs;
- void f(); // #dr161-f
+ void f(); // #cwg161-f
static void sf();
};
struct C : A {};
@@ -816,18 +816,18 @@ namespace dr161 { // dr161: 3.1
B b1;
C::B b2; // ok, accessible as a member of A
(void)&C::b;
- // expected-error at -1 {{'b' is a protected member of 'dr161::A'}}
- // expected-note@#dr161-B {{declared protected here}}
+ // expected-error at -1 {{'b' is a protected member of 'cwg161::A'}}
+ // expected-note@#cwg161-B {{declared protected here}}
(void)&C::bs;
(void)c.b;
- // expected-error at -1 {{'b' is a protected member of 'dr161::A'}}
- // expected-note@#dr161-B {{declared protected here}}
+ // expected-error at -1 {{'b' is a protected member of 'cwg161::A'}}
+ // expected-note@#cwg161-B {{declared protected here}}
(void)c.bs;
f();
sf();
c.f();
// expected-error at -1 {{protected}}
- // expected-note@#dr161-f {{declared protected here}}
+ // expected-note@#cwg161-f {{declared protected here}}
c.sf();
A::f();
D::f();
@@ -838,7 +838,7 @@ namespace dr161 { // dr161: 3.1
};
}
-namespace dr162 { // dr162: no
+namespace cwg162 { // cwg162: no
struct A {
char &f(char);
static int &f(int);
@@ -857,9 +857,9 @@ namespace dr162 { // dr162: no
// expected-error at -1 {{reference to overloaded function could not be resolved; did you mean to call it?}}
}
-// dr163: na
+// cwg163: na
-namespace dr164 { // dr164: yes
+namespace cwg164 { // cwg164: yes
void f(int);
template <class T> int g(T t) { return f(t); }
@@ -869,35 +869,35 @@ namespace dr164 { // dr164: yes
int k = g(e);
}
-namespace dr165 { // dr165: no
+namespace cwg165 { // cwg165: no
namespace N {
struct A { friend struct B; };
void f() { void g(); }
}
- // FIXME: dr1477 says this is ok, dr165 says it's ill-formed
+ // FIXME: cwg1477 says this is ok, cwg165 says it's ill-formed
struct N::B {};
- // FIXME: dr165 says this is ill-formed, but the argument in dr1477 says it's ok
+ // FIXME: cwg165 says this is ill-formed, but the argument in cwg1477 says it's ok
void N::g() {}
}
-namespace dr166 { // dr166: 2.9
+namespace cwg166 { // cwg166: 2.9
namespace A { class X; }
template<typename T> int f(T t) { return t.n; }
int g(A::X);
template<typename T> int h(T t) { return t.n; }
- // expected-error at -1 {{'n' is a private member of 'dr166::A::X'}}
- // expected-note@#dr166-h-instantiation {{in instantiation of function template specialization 'dr166::h<dr166::A::X>' requested here}}
- // expected-note@#dr166-X-n {{implicitly declared private here}}
+ // expected-error at -1 {{'n' is a private member of 'cwg166::A::X'}}
+ // expected-note@#cwg166-h-instantiation {{in instantiation of function template specialization 'cwg166::h<cwg166::A::X>' requested here}}
+ // expected-note@#cwg166-X-n {{implicitly declared private here}}
int i(A::X);
namespace A {
class X {
friend int f<X>(X);
- friend int dr166::g(X);
+ friend int cwg166::g(X);
friend int h(X);
friend int i(X);
- int n; // #dr166-X-n
+ int n; // #cwg166-X-n
};
int h(X x) { return x.n; }
@@ -906,15 +906,15 @@ namespace dr166 { // dr166: 2.9
template int f(A::X);
int g(A::X x) { return x.n; }
- template int h(A::X); // #dr166-h-instantiation
+ template int h(A::X); // #cwg166-h-instantiation
int i(A::X x) { return x.n; }
- // expected-error at -1 {{'n' is a private member of 'dr166::A::X'}}
- // expected-note@#dr166-X-n {{implicitly declared private here}}
+ // expected-error at -1 {{'n' is a private member of 'cwg166::A::X'}}
+ // expected-note@#cwg166-X-n {{implicitly declared private here}}
}
-// dr167: sup 1012
+// cwg167: sup 1012
-namespace dr168 { // dr168: no
+namespace cwg168 { // cwg168: no
extern "C" typedef int (*p)();
extern "C++" typedef int (*q)();
struct S {
@@ -924,7 +924,7 @@ namespace dr168 { // dr168: no
q b = &S::f;
}
-namespace dr169 { // dr169: yes
+namespace cwg169 { // cwg169: yes
template<typename> struct A { int n; };
struct B {
template<typename> struct C;
@@ -943,18 +943,18 @@ namespace dr169 { // dr169: yes
};
}
-namespace { // dr171: 3.4
- int dr171a;
+namespace { // cwg171: 3.4
+ int cwg171a;
}
-int dr171b; // #dr171b-int
-namespace dr171 {
- extern "C" void dr171a();
- extern "C" void dr171b();
- // expected-error at -1 {{declaration of 'dr171b' with C language linkage conflicts with declaration in global scope}}
- // expected-note@#dr171b-int {{declared in global scope here}}
+int cwg171b; // #cwg171b-int
+namespace cwg171 {
+ extern "C" void cwg171a();
+ extern "C" void cwg171b();
+ // expected-error at -1 {{declaration of 'cwg171b' with C language linkage conflicts with declaration in global scope}}
+ // expected-note@#cwg171b-int {{declared in global scope here}}
}
-namespace dr172 { // dr172: yes
+namespace cwg172 { // cwg172: yes
enum { zero };
int check1[-1 < zero ? 1 : -1];
@@ -988,38 +988,38 @@ namespace dr172 { // dr172: yes
int check8b[-f > 0 ? 1 : -1];
}
-namespace dr173 { // dr173: yes
+namespace cwg173 { // cwg173: yes
int check[('0' + 1 == '1' && '0' + 2 == '2' && '0' + 3 == '3' &&
'0' + 4 == '4' && '0' + 5 == '5' && '0' + 6 == '6' &&
'0' + 7 == '7' && '0' + 8 == '8' && '0' + 9 == '9') ? 1 : -1];
}
-// dr174: sup 1012
+// cwg174: sup 1012
-namespace dr175 { // dr175: 2.8
- struct A {}; // #dr175-A
- struct B : private A {}; // #dr175-B
+namespace cwg175 { // cwg175: 2.8
+ struct A {}; // #cwg175-A
+ struct B : private A {}; // #cwg175-B
struct C : B {
A a;
- // expected-error at -1 {{'A' is a private member of 'dr175::A'}}
- // expected-note@#dr175-B {{constrained by private inheritance here}}
- // expected-note@#dr175-A {{member is declared here}}
- dr175::A b;
+ // expected-error at -1 {{'A' is a private member of 'cwg175::A'}}
+ // expected-note@#cwg175-B {{constrained by private inheritance here}}
+ // expected-note@#cwg175-A {{member is declared here}}
+ cwg175::A b;
};
}
-namespace dr176 { // dr176: 3.1
+namespace cwg176 { // cwg176: 3.1
template<typename T> class Y;
template<> class Y<int> {
void f() {
- typedef Y A; // #dr176-A-first
+ typedef Y A; // #cwg176-A-first
typedef Y<char> A;
// expected-error at -1 {{typedef redefinition with
diff erent types ('Y<char>' vs 'Y<int>')}}
- // expected-note@#dr176-A-first {{previous definition is here}}
+ // expected-note@#cwg176-A-first {{previous definition is here}}
}
};
- template<typename T> struct Base {}; // #dr176-Base
+ template<typename T> struct Base {}; // #cwg176-Base
template<typename T> struct Derived : public Base<T> {
void f() {
typedef typename Derived::template Base<T> A;
@@ -1031,45 +1031,45 @@ namespace dr176 { // dr176: 3.1
template<typename T> struct Derived2 : Base<int>, Base<char> {
typename Derived2::Base b;
// expected-error at -1 {{member 'Base' found in multiple base classes of
diff erent types}}
- // expected-note@#dr176-Base {{member type 'dr176::Base<int>' found by ambiguous name lookup}}
- // expected-note@#dr176-Base {{member type 'dr176::Base<char>' found by ambiguous name lookup}}
+ // expected-note@#cwg176-Base {{member type 'cwg176::Base<int>' found by ambiguous name lookup}}
+ // expected-note@#cwg176-Base {{member type 'cwg176::Base<char>' found by ambiguous name lookup}}
typename Derived2::Base<double> d;
};
- template<typename T> class X { // #dr176-X
+ template<typename T> class X { // #cwg176-X
X *p1;
X<T> *p2;
X<int> *p3;
- dr176::X *p4; // #dr176-p4
- // cxx98-14-error@#dr176-p4 {{use of class template 'dr176::X' requires template arguments}}
- // cxx98-14-note@#dr176-X {{template is declared here}}
- // since-cxx17-error@#dr176-p4 {{use of class template 'X' requires template arguments; argument deduction not allowed in non-static class member}}
- // since-cxx17-note@#dr176-X {{template is declared here}}
+ cwg176::X *p4; // #cwg176-p4
+ // cxx98-14-error@#cwg176-p4 {{use of class template 'cwg176::X' requires template arguments}}
+ // cxx98-14-note@#cwg176-X {{template is declared here}}
+ // since-cxx17-error@#cwg176-p4 {{use of class template 'X' requires template arguments; argument deduction not allowed in non-static class member}}
+ // since-cxx17-note@#cwg176-X {{template is declared here}}
};
}
-namespace dr177 { // dr177: yes
+namespace cwg177 { // cwg177: yes
struct B {};
struct A {
- A(A &); // #dr177-A-copy-ctor
- A(const B &); // #dr177-A-ctor-from-B
+ A(A &); // #cwg177-A-copy-ctor
+ A(const B &); // #cwg177-A-ctor-from-B
};
B b;
A a = b;
// cxx98-14-error at -1 {{no viable constructor copying variable of type 'A'}}
- // cxx98-14-note@#dr177-A-copy-ctor {{candidate constructor not viable: expects an lvalue for 1st argument}}
- // cxx98-14-note@#dr177-A-ctor-from-B {{candidate constructor not viable: no known conversion from 'A' to 'const B &' for 1st argument}}
+ // cxx98-14-note@#cwg177-A-copy-ctor {{candidate constructor not viable: expects an lvalue for 1st argument}}
+ // cxx98-14-note@#cwg177-A-ctor-from-B {{candidate constructor not viable: no known conversion from 'A' to 'const B &' for 1st argument}}
- struct C { C(C&); }; // #dr177-C-copy-ctor
+ struct C { C(C&); }; // #cwg177-C-copy-ctor
struct D : C {};
struct E { operator D(); };
E e;
C c = e;
// expected-error at -1 {{no viable constructor copying variable of type 'D'}}
- // expected-note@#dr177-C-copy-ctor {{candidate constructor not viable: expects an lvalue for 1st argument}}
+ // expected-note@#cwg177-C-copy-ctor {{candidate constructor not viable: expects an lvalue for 1st argument}}
}
-namespace dr178 { // dr178: yes
+namespace cwg178 { // cwg178: yes
int check[int() == 0 ? 1 : -1];
#if __cplusplus >= 201103L
static_assert(int{} == 0, "");
@@ -1082,13 +1082,13 @@ namespace dr178 { // dr178: yes
#endif
}
-namespace dr179 { // dr179: yes
+namespace cwg179 { // cwg179: yes
void f();
int n = &f - &f;
// expected-error at -1 {{arithmetic on pointers to the function type 'void ()'}}
}
-namespace dr180 { // dr180: 2.8
+namespace cwg180 { // cwg180: 2.8
template<typename T> struct X : T, T::some_base {
X() : T::some_type_that_might_be_T(), T::some_base() {}
friend class T::some_class;
@@ -1098,7 +1098,7 @@ namespace dr180 { // dr180: 2.8
};
}
-namespace dr181 { // dr181: yes
+namespace cwg181 { // cwg181: yes
namespace X {
template <template X<class T> > struct A { };
// expected-error at -1 +{{}}
@@ -1112,7 +1112,7 @@ namespace dr181 { // dr181: yes
}
}
-namespace dr182 { // dr182: 14
+namespace cwg182 { // cwg182: 14
template <class T> struct C {
void f();
void g();
@@ -1135,7 +1135,7 @@ namespace dr182 { // dr182: 14
}
}
-namespace dr183 { // dr183: sup 382
+namespace cwg183 { // cwg183: sup 382
template<typename T> struct A {};
template<typename T> struct B {
typedef int X;
@@ -1146,7 +1146,7 @@ namespace dr183 { // dr183: sup 382
};
}
-namespace dr184 { // dr184: yes
+namespace cwg184 { // cwg184: yes
template<typename T = float> struct B {};
template<template<typename TT = float> class T> struct A {
@@ -1154,10 +1154,10 @@ namespace dr184 { // dr184: yes
void g();
};
- template<template<typename TT> class T> void A<T>::f() { // #dr184-T
+ template<template<typename TT> class T> void A<T>::f() { // #cwg184-T
T<> t;
// expected-error at -1 {{too few template arguments for template template parameter 'T'}}
- // expected-note@#dr184-T {{template is declared here}}
+ // expected-note@#cwg184-T {{template is declared here}}
}
template<template<typename TT = char> class T> void A<T>::g() {
@@ -1169,25 +1169,25 @@ namespace dr184 { // dr184: yes
void h() { A<B>().g(); }
}
-// dr185 is in dr185.cpp
+// cwg185 is in cwg185.cpp
-namespace dr187 { // dr187: sup 481
+namespace cwg187 { // cwg187: sup 481
const int Z = 1;
template<int X = Z, int Z = X> struct A;
typedef A<> T;
typedef A<1, 1> T;
}
-namespace dr188 { // dr188: yes
+namespace cwg188 { // cwg188: yes
char c[10];
int check[sizeof(0, c) == 10 ? 1 : -1];
}
-// dr190 FIXME: add codegen test for tbaa
+// cwg190 FIXME: add codegen test for tbaa
// or implement C++20 std::is_layout_compatible and test it this way
-int dr191_j;
-namespace dr191 { // dr191: yes
+int cwg191_j;
+namespace cwg191 { // cwg191: yes
namespace example1 {
struct outer {
static int i;
@@ -1208,7 +1208,7 @@ namespace dr191 { // dr191: yes
void f() {
struct local2 {
void g() {
- dr191_j = 5;
+ cwg191_j = 5;
}
};
}
@@ -1216,9 +1216,9 @@ namespace dr191 { // dr191: yes
}
}
-// dr193 is in dr193.cpp
+// cwg193 is in cwg193.cpp
-namespace dr194 { // dr194: yes
+namespace cwg194 { // cwg194: yes
struct A {
A();
void A();
@@ -1234,7 +1234,7 @@ namespace dr194 { // dr194: yes
};
}
-namespace dr195 { // dr195: yes
+namespace cwg195 { // cwg195: yes
void f();
int *p = (int*)&f;
// cxx98-error at -1 {{cast between pointer-to-function and pointer-to-object is an extension}}
@@ -1242,14 +1242,14 @@ namespace dr195 { // dr195: yes
// cxx98-error at -1 {{cast between pointer-to-function and pointer-to-object is an extension}}
}
-namespace dr197 { // dr197: yes
+namespace cwg197 { // cwg197: yes
char &f(char);
template <class T> void g(T t) {
char &a = f(1);
char &b = f(T(1));
// expected-error at -1 {{non-const lvalue reference to type 'char' cannot bind to a value of unrelated type 'int'}}
- // expected-note@#dr197-g-e-call {{in instantiation of function template specialization 'dr197::g<dr197::E>' requested here}}
+ // expected-note@#cwg197-g-e-call {{in instantiation of function template specialization 'cwg197::g<cwg197::E>' requested here}}
char &c = f(t);
// expected-error at -1 {{non-const lvalue reference to type 'char' cannot bind to a value of unrelated type 'int'}}
}
@@ -1262,11 +1262,11 @@ namespace dr197 { // dr197: yes
void h() {
g('a');
g(2);
- g(e); // #dr197-g-e-call
+ g(e); // #cwg197-g-e-call
}
}
-namespace dr198 { // dr198: yes
+namespace cwg198 { // cwg198: yes
struct A {
int n;
struct B {
@@ -1291,4 +1291,4 @@ namespace dr198 { // dr198: yes
};
}
-// dr199 is in dr199.cpp
+// cwg199 is in cwg199.cpp
diff --git a/clang/test/CXX/drs/dr20xx.cpp b/clang/test/CXX/drs/dr20xx.cpp
index 96f2572cfb524d..291a77e0cc71dd 100644
--- a/clang/test/CXX/drs/dr20xx.cpp
+++ b/clang/test/CXX/drs/dr20xx.cpp
@@ -11,7 +11,7 @@
// cxx98-error at -1 {{variadic macros are a C99 feature}}
#endif
-namespace dr2007 { // dr2007: 3.4
+namespace cwg2007 { // cwg2007: 3.4
template<typename T> struct A { typename T::error e; };
template<typename T> struct B { };
B<A<void> > b1;
@@ -20,24 +20,24 @@ int a = b2[0];
// cxx98-error at -1 {{type 'B<A<void> >' does not provide a subscript operator}}
// since-cxx11-error at -2 {{type 'B<A<void>>' does not provide a subscript operator}}
int b = __builtin_addressof(b2)->foo;
-// cxx98-error at -1 {{no member named 'foo' in 'dr2007::B<dr2007::A<void> >'}}
-// since-cxx11-error at -2 {{no member named 'foo' in 'dr2007::B<dr2007::A<void>>'}}
+// cxx98-error at -1 {{no member named 'foo' in 'cwg2007::B<cwg2007::A<void> >'}}
+// since-cxx11-error at -2 {{no member named 'foo' in 'cwg2007::B<cwg2007::A<void>>'}}
}
-// dr2009: na
+// cwg2009: na
-namespace dr2026 { // dr2026: 11
+namespace cwg2026 { // cwg2026: 11
template<int> struct X {};
- const int a = a + 1; // #dr2026-a
+ const int a = a + 1; // #cwg2026-a
// expected-warning at -1 {{variable 'a' is uninitialized when used within its own initialization}}
- X<a> xa; // #dr2026-xa
+ X<a> xa; // #cwg2026-xa
// cxx98-error at -1 {{non-type template argument of type 'int' is not an integral constant expression}}
// cxx98-note at -2 {{initializer of 'a' is not a constant expression}}
- // cxx98-note@#dr2026-a {{declared here}}
- // since-cxx11-error@#dr2026-xa {{non-type template argument is not a constant expression}}
- // since-cxx11-note@#dr2026-xa {{initializer of 'a' is not a constant expression}}
- // since-cxx11-note@#dr2026-a {{declared here}}
+ // cxx98-note@#cwg2026-a {{declared here}}
+ // since-cxx11-error@#cwg2026-xa {{non-type template argument is not a constant expression}}
+ // since-cxx11-note@#cwg2026-xa {{initializer of 'a' is not a constant expression}}
+ // since-cxx11-note@#cwg2026-a {{declared here}}
#if __cplusplus >= 201103L
constexpr int b = b;
@@ -59,15 +59,15 @@ namespace dr2026 { // dr2026: 11
#endif
void f() {
- static const int e = e + 1; // #dr2026-e
+ static const int e = e + 1; // #cwg2026-e
// expected-warning at -1 {{static variable 'e' is suspiciously used within its own initialization}}
- X<e> xe; // #dr2026-xe
+ X<e> xe; // #cwg2026-xe
// cxx98-error at -1 {{non-type template argument of type 'int' is not an integral constant expression}}
// cxx98-note at -2 {{initializer of 'e' is not a constant expression}}
- // cxx98-note@#dr2026-e {{declared here}}
- // since-cxx11-error@#dr2026-xe {{non-type template argument is not a constant expression}}
- // since-cxx11-note@#dr2026-xe {{initializer of 'e' is not a constant expression}}
- // since-cxx11-note@#dr2026-e {{declared here}}
+ // cxx98-note@#cwg2026-e {{declared here}}
+ // since-cxx11-error@#cwg2026-xe {{non-type template argument is not a constant expression}}
+ // since-cxx11-note@#cwg2026-xe {{initializer of 'e' is not a constant expression}}
+ // since-cxx11-note@#cwg2026-e {{declared here}}
#if __cplusplus >= 201103L
static constexpr int f = f;
@@ -90,7 +90,7 @@ namespace dr2026 { // dr2026: 11
}
}
-namespace dr2049 { // dr2049: 18 drafting P2308R1
+namespace cwg2049 { // cwg2049: 18 drafting P2308R1
#if __cplusplus >= 202302L
template <int* x = {}> struct X {};
X<> a;
@@ -99,7 +99,7 @@ static_assert(__is_same(decltype(a), decltype(b)));
#endif
}
-namespace dr2061 { // dr2061: yes
+namespace cwg2061 { // cwg2061: yes
#if __cplusplus >= 201103L
namespace A {
inline namespace b {
@@ -127,7 +127,7 @@ namespace dr2061 { // dr2061: yes
#endif // C++11
}
-namespace dr2076 { // dr2076: 13
+namespace cwg2076 { // cwg2076: 13
#if __cplusplus >= 201103L
namespace std_example {
struct A { A(int); };
@@ -149,8 +149,8 @@ namespace dr2076 { // dr2076: 13
operator string_view() const;
};
- void foo(const string &); // #dr2076-foo
- void bar(string_view); // #dr2076-bar
+ void foo(const string &); // #cwg2076-foo
+ void bar(string_view); // #cwg2076-bar
void func(const string &arg) {
// An argument in one set of braces is subject to user-defined conversions;
@@ -161,27 +161,27 @@ namespace dr2076 { // dr2076: 13
foo({{arg}});
foo({{{arg}}});
// since-cxx11-error at -1 {{no matching function}}
- // since-cxx11-note@#dr2076-foo {{cannot convert initializer list}}
+ // since-cxx11-note@#cwg2076-foo {{cannot convert initializer list}}
bar(arg);
bar({arg});
bar({{arg}});
// since-cxx11-error at -1 {{no matching function}}
- // since-cxx11-note@#dr2076-bar {{cannot convert initializer list}}
+ // since-cxx11-note@#cwg2076-bar {{cannot convert initializer list}}
bar({{{arg}}});
// since-cxx11-error at -1 {{no matching function}}
- // since-cxx11-note@#dr2076-bar {{cannot convert initializer list}}
+ // since-cxx11-note@#cwg2076-bar {{cannot convert initializer list}}
}
#endif
}
-namespace dr2082 { // dr2082: 11
+namespace cwg2082 { // cwg2082: 11
void test1(int x, int = sizeof(x)); // ok
#if __cplusplus >= 201103L
void test2(int x, int = decltype(x){}); // ok
#endif
}
-namespace dr2083 { // dr2083: partial
+namespace cwg2083 { // cwg2083: partial
#if __cplusplus >= 201103L
void non_const_mem_ptr() {
struct A {
@@ -204,23 +204,23 @@ namespace dr2083 { // dr2083: partial
const int a = 1;
int b;
// Note, references only get special odr-use / constant initializxer
- // treatment in C++11 onwards. We continue to apply that even after DR2083.
+ // treatment in C++11 onwards. We continue to apply that even after CWG2083.
void ref_to_non_const() {
int c;
- const int &ra = a; // #dr2083-ra
- int &rb = b; // #dr2083-rb
- int &rc = c; // #dr2083-rc
+ const int &ra = a; // #cwg2083-ra
+ int &rb = b; // #cwg2083-rb
+ int &rc = c; // #cwg2083-rc
struct A {
int f() {
int a = ra;
- // cxx98-error at -1 {{reference to local variable 'ra' declared in enclosing function 'dr2083::ref_to_non_const'}}
- // cxx98-note@#dr2083-ra {{'ra' declared here}}
+ // cxx98-error at -1 {{reference to local variable 'ra' declared in enclosing function 'cwg2083::ref_to_non_const'}}
+ // cxx98-note@#cwg2083-ra {{'ra' declared here}}
int b = rb;
- // cxx98-error at -1 {{reference to local variable 'rb' declared in enclosing function 'dr2083::ref_to_non_const'}}
- // cxx98-note@#dr2083-rb {{'rb' declared here}}
+ // cxx98-error at -1 {{reference to local variable 'rb' declared in enclosing function 'cwg2083::ref_to_non_const'}}
+ // cxx98-note@#cwg2083-rb {{'rb' declared here}}
int c = rc;
- // expected-error at -1 {{reference to local variable 'rc' declared in enclosing function 'dr2083::ref_to_non_const'}}
- // expected-note@#dr2083-rc {{'rc' declared here}}
+ // expected-error at -1 {{reference to local variable 'rc' declared in enclosing function 'cwg2083::ref_to_non_const'}}
+ // expected-note@#cwg2083-rc {{'rc' declared here}}
return a + b + c;
}
};
@@ -244,9 +244,9 @@ namespace dr2083 { // dr2083: partial
constexpr NoMut1 nm1 = {1, 2};
constexpr NoMut2 nm2 = {1, 2};
constexpr NoMut3 nm3 = {1, 2};
- constexpr Mut1 m1 = {1, 2}; // #dr2083-m1
- constexpr Mut2 m2 = {1, 2}; // #dr2083-m2
- constexpr Mut3 m3 = {1, 2}; // #dr2083-m3
+ constexpr Mut1 m1 = {1, 2}; // #cwg2083-m1
+ constexpr Mut2 m2 = {1, 2}; // #cwg2083-m2
+ constexpr Mut3 m3 = {1, 2}; // #cwg2083-m3
struct A {
void f() {
static_assert(nm1.a == 1, "");
@@ -254,14 +254,14 @@ namespace dr2083 { // dr2083: partial
static_assert(nm3.a == 1, "");
// Can't even access a non-mutable member of a variable containing mutable fields.
static_assert(m1.a == 1, "");
- // since-cxx11-error at -1 {{reference to local variable 'm1' declared in enclosing function 'dr2083::mutable_subobjects'}}
- // since-cxx11-note@#dr2083-m1 {{'m1' declared here}}
+ // since-cxx11-error at -1 {{reference to local variable 'm1' declared in enclosing function 'cwg2083::mutable_subobjects'}}
+ // since-cxx11-note@#cwg2083-m1 {{'m1' declared here}}
static_assert(m2.m.a == 1, "");
- // since-cxx11-error at -1 {{reference to local variable 'm2' declared in enclosing function 'dr2083::mutable_subobjects'}}
- // since-cxx11-note@#dr2083-m2 {{'m2' declared here}}
+ // since-cxx11-error at -1 {{reference to local variable 'm2' declared in enclosing function 'cwg2083::mutable_subobjects'}}
+ // since-cxx11-note@#cwg2083-m2 {{'m2' declared here}}
static_assert(m3.a == 1, "");
- // since-cxx11-error at -1 {{reference to local variable 'm3' declared in enclosing function 'dr2083::mutable_subobjects'}}
- // since-cxx11-note@#dr2083-m3 {{'m3' declared here}}
+ // since-cxx11-error at -1 {{reference to local variable 'm3' declared in enclosing function 'cwg2083::mutable_subobjects'}}
+ // since-cxx11-note@#cwg2083-m3 {{'m3' declared here}}
}
};
}
@@ -274,7 +274,7 @@ namespace dr2083 { // dr2083: partial
#if __cplusplus >= 201103L
constexpr
#endif
- A a = {}; // #dr2083-a
+ A a = {}; // #cwg2083-a
struct B {
void f() {
ellipsis(n);
@@ -282,8 +282,8 @@ namespace dr2083 { // dr2083: partial
// conversion, it calls a constructor and binds 'a' to a reference, so
// it results in an odr-use.
ellipsis(a);
- // expected-error at -1 {{reference to local variable 'a' declared in enclosing function 'dr2083::ellipsis'}}
- // expected-note@#dr2083-a {{'a' declared here}}
+ // expected-error at -1 {{reference to local variable 'a' declared in enclosing function 'cwg2083::ellipsis'}}
+ // expected-note@#cwg2083-a {{'a' declared here}}
}
};
}
@@ -291,7 +291,7 @@ namespace dr2083 { // dr2083: partial
#if __cplusplus >= 201103L
void volatile_lval() {
struct A { int n; };
- constexpr A a = {0}; // #dr2083-a2
+ constexpr A a = {0}; // #cwg2083-a2
struct B {
void f() {
// An lvalue-to-rvalue conversion of a volatile lvalue always results
@@ -300,8 +300,8 @@ namespace dr2083 { // dr2083: partial
int x = a.*p;
volatile int A::*q = p;
int y = a.*q;
- // since-cxx11-error at -1 {{reference to local variable 'a' declared in enclosing function 'dr2083::volatile_lval'}}
- // since-cxx11-note@#dr2083-a2 {{'a' declared here}}
+ // since-cxx11-error at -1 {{reference to local variable 'a' declared in enclosing function 'cwg2083::volatile_lval'}}
+ // since-cxx11-note@#cwg2083-a2 {{'a' declared here}}
}
};
}
@@ -309,45 +309,45 @@ namespace dr2083 { // dr2083: partial
void discarded_lval() {
struct A { int x; mutable int y; volatile int z; };
- A a; // #dr2083-a-3
- int &r = a.x; // #dr2083-r
+ A a; // #cwg2083-a-3
+ int &r = a.x; // #cwg2083-r
struct B {
void f() {
// FIXME: We emit more errors than we should be. They are explictly marked below.
a.x;
// expected-warning at -1 {{expression result unused}}
- // expected-error at -2 {{reference to local variable 'a' declared in enclosing function 'dr2083::discarded_lval'}} FIXME
- // expected-note@#dr2083-a-3 {{'a' declared here}}
+ // expected-error at -2 {{reference to local variable 'a' declared in enclosing function 'cwg2083::discarded_lval'}} FIXME
+ // expected-note@#cwg2083-a-3 {{'a' declared here}}
a.*&A::x;
// expected-warning at -1 {{expression result unused}}
- // expected-error at -2 {{reference to local variable 'a' declared in enclosing function 'dr2083::discarded_lval'}} FIXME
- // expected-note@#dr2083-a-3 {{'a' declared here}}
- true ? a.x : a.y; // #dr2083-ternary
+ // expected-error at -2 {{reference to local variable 'a' declared in enclosing function 'cwg2083::discarded_lval'}} FIXME
+ // expected-note@#cwg2083-a-3 {{'a' declared here}}
+ true ? a.x : a.y; // #cwg2083-ternary
// expected-warning at -1 {{expression result unused}}
- // expected-error@#dr2083-ternary {{reference to local variable 'a' declared in enclosing function 'dr2083::discarded_lval'}} FIXME
- // expected-note@#dr2083-a-3 {{'a' declared here}}
- // expected-error@#dr2083-ternary {{reference to local variable 'a' declared in enclosing function 'dr2083::discarded_lval'}} FIXME
- // expected-note@#dr2083-a-3 {{'a' declared here}}
+ // expected-error@#cwg2083-ternary {{reference to local variable 'a' declared in enclosing function 'cwg2083::discarded_lval'}} FIXME
+ // expected-note@#cwg2083-a-3 {{'a' declared here}}
+ // expected-error@#cwg2083-ternary {{reference to local variable 'a' declared in enclosing function 'cwg2083::discarded_lval'}} FIXME
+ // expected-note@#cwg2083-a-3 {{'a' declared here}}
(void)a.x;
- // expected-error at -1 {{reference to local variable 'a' declared in enclosing function 'dr2083::discarded_lval'}} FIXME
- // expected-note@#dr2083-a-3 {{'a' declared here}}
+ // expected-error at -1 {{reference to local variable 'a' declared in enclosing function 'cwg2083::discarded_lval'}} FIXME
+ // expected-note@#cwg2083-a-3 {{'a' declared here}}
a.x, discarded_lval();
// expected-warning at -1 {{left operand of comma operator has no effect}}
- // expected-error at -2 {{reference to local variable 'a' declared in enclosing function 'dr2083::discarded_lval'}} FIXME
- // expected-note@#dr2083-a-3 {{'a' declared here}}
+ // expected-error at -2 {{reference to local variable 'a' declared in enclosing function 'cwg2083::discarded_lval'}} FIXME
+ // expected-note@#cwg2083-a-3 {{'a' declared here}}
// 'volatile' qualifier triggers an lvalue-to-rvalue conversion.
a.z;
// cxx98-warning at -1 {{expression result unused; assign into a variable to force a volatile load}}
- // expected-error at -2 {{reference to local variable 'a' declared in enclosing function 'dr2083::discarded_lval'}}
- // expected-note@#dr2083-a-3 {{'a' declared here}}
+ // expected-error at -2 {{reference to local variable 'a' declared in enclosing function 'cwg2083::discarded_lval'}}
+ // expected-note@#cwg2083-a-3 {{'a' declared here}}
// References always get "loaded" to determine what they reference,
// even if the result is discarded.
r;
// expected-warning at -1 {{expression result unused}}
- // expected-error at -2 {{reference to local variable 'r' declared in enclosing function 'dr2083::discarded_lval'}}
- // expected-note@#dr2083-r {{'r' declared here}}
+ // expected-error at -2 {{reference to local variable 'r' declared in enclosing function 'cwg2083::discarded_lval'}}
+ // expected-note@#cwg2083-r {{'r' declared here}}
}
};
}
@@ -355,11 +355,11 @@ namespace dr2083 { // dr2083: partial
namespace dr_example_1 {
extern int globx;
int main() {
- const int &x = globx; // #dr2083-x
+ const int &x = globx; // #cwg2083-x
struct A {
const int *foo() { return &x; }
- // cxx98-error at -1 {{reference to local variable 'x' declared in enclosing function 'dr2083::dr_example_1::main'}}
- // cxx98-note@#dr2083-x {{'x' declared here}}
+ // cxx98-error at -1 {{reference to local variable 'x' declared in enclosing function 'cwg2083::dr_example_1::main'}}
+ // cxx98-note@#cwg2083-x {{'x' declared here}}
} a;
return *a.foo();
}
@@ -400,7 +400,7 @@ namespace dr2083 { // dr2083: partial
#endif
}
-namespace dr2094 { // dr2094: 5
+namespace cwg2094 { // cwg2094: 5
struct A { int n; };
struct B { volatile int n; };
static_assert(__is_trivially_copyable(volatile int), "");
@@ -419,4 +419,4 @@ namespace dr2094 { // dr2094: 5
static_assert(__is_trivially_assignable(B, const B&), "");
}
-// dr2096: dup 2598
+// cwg2096: dup 2598
diff --git a/clang/test/CXX/drs/dr21xx.cpp b/clang/test/CXX/drs/dr21xx.cpp
index a7e50df3f374be..4fab10c279aa43 100644
--- a/clang/test/CXX/drs/dr21xx.cpp
+++ b/clang/test/CXX/drs/dr21xx.cpp
@@ -11,7 +11,7 @@
// cxx98-error at -1 {{variadic macros are a C99 feature}}
#endif
-namespace dr2100 { // dr2100: 12
+namespace cwg2100 { // cwg2100: 12
template<const int *P, bool = true> struct X {};
template<typename T> struct A {
static const int n = 1;
@@ -19,10 +19,10 @@ namespace dr2100 { // dr2100: 12
return X<&n>::n; // ok, value-dependent
}
int g() {
- static const int n = 2; // #dr2100-n
+ static const int n = 2; // #cwg2100-n
return X<&n>::n; // ok, value-dependent
// cxx98-14-error at -1 {{non-type template argument refers to object 'n' that does not have linkage}}
- // cxx98-14-note@#dr2100-n {{non-type template argument refers to object here}}
+ // cxx98-14-note@#cwg2100-n {{non-type template argument refers to object here}}
}
};
template<const int *P> struct X<P> {
@@ -41,12 +41,12 @@ namespace dr2100 { // dr2100: 12
static const int n = 1;
int f() {
return Y<n>::declared_later;
- // expected-error at -1 {{no member named 'declared_later' in 'dr2100::Y<1>'}}
+ // expected-error at -1 {{no member named 'declared_later' in 'cwg2100::Y<1>'}}
}
int g() {
static const int n = 2;
return Y<n>::declared_later;
- // expected-error at -1 {{no member named 'declared_later' in 'dr2100::Y<2>'}}
+ // expected-error at -1 {{no member named 'declared_later' in 'cwg2100::Y<2>'}}
}
};
template<int N> struct Y<N> {
@@ -54,22 +54,22 @@ namespace dr2100 { // dr2100: 12
};
}
-namespace dr2103 { // dr2103: yes
+namespace cwg2103 { // cwg2103: yes
void f() {
int a;
- int &r = a; // #dr2103-r
+ int &r = a; // #cwg2103-r
struct Inner {
void f() {
int &s = r;
- // expected-error at -1 {{reference to local variable 'r' declared in enclosing function 'dr2103::f'}}
- // expected-note@#dr2103-r {{'r' declared here}}
+ // expected-error at -1 {{reference to local variable 'r' declared in enclosing function 'cwg2103::f'}}
+ // expected-note@#cwg2103-r {{'r' declared here}}
(void)s;
}
};
}
}
-namespace dr2120 { // dr2120: 7
+namespace cwg2120 { // cwg2120: 7
struct A {};
struct B : A {};
struct C { A a; };
@@ -80,7 +80,7 @@ namespace dr2120 { // dr2120: 7
static_assert(!__is_standard_layout(E), "");
}
-namespace dr2126 { // dr2126: 12
+namespace cwg2126 { // cwg2126: 12
#if __cplusplus >= 201103L
struct A { int n; };
@@ -88,16 +88,16 @@ namespace dr2126 { // dr2126: 12
A &b = (A &)(const A &)A{1}; // const temporary
A &&c = (A &&)(const A &)A{1}; // const temporary
- A &&d = {1}; // non-const temporary #dr21260-d
- const A &e = (A &)(A &&) A{1}; // non-const temporary #dr21260-e
- A &&f = (A &&)(A &&) A{1}; // non-const temporary #dr21260-f
+ A &&d = {1}; // non-const temporary #cwg21260-d
+ const A &e = (A &)(A &&) A{1}; // non-const temporary #cwg21260-e
+ A &&f = (A &&)(A &&) A{1}; // non-const temporary #cwg21260-f
constexpr const A &g = {1}; // const temporary
- constexpr A &&h = {1}; // non-const temporary #dr21260-h
+ constexpr A &&h = {1}; // non-const temporary #cwg21260-h
struct B { const A &a; };
- B i = {{1}}; // extending decl not usable in constant expr #dr21260-i
- const B j = {{1}}; // extending decl not usable in constant expr #dr21260-j
+ B i = {{1}}; // extending decl not usable in constant expr #cwg21260-i
+ const B j = {{1}}; // extending decl not usable in constant expr #cwg21260-j
constexpr B k = {{1}}; // extending decl usable in constant expr
static_assert(a.n == 1, "");
@@ -106,33 +106,33 @@ namespace dr2126 { // dr2126: 12
static_assert(d.n == 1, "");
// since-cxx11-error at -1 {{static assertion expression is not an integral constant expression}}
// since-cxx11-note at -2 {{read of temporary is not allowed in a constant expression outside the expression that created the temporary}}
- // since-cxx11-note@#dr21260-d {{temporary created here}}
+ // since-cxx11-note@#cwg21260-d {{temporary created here}}
static_assert(e.n == 1, "");
// since-cxx11-error at -1 {{static assertion expression is not an integral constant expression}}
// since-cxx11-note at -2 {{read of temporary is not allowed in a constant expression outside the expression that created the temporary}}
- // since-cxx11-note@#dr21260-e {{temporary created here}}
+ // since-cxx11-note@#cwg21260-e {{temporary created here}}
static_assert(f.n == 1, "");
// since-cxx11-error at -1 {{static assertion expression is not an integral constant expression}}
// since-cxx11-note at -2 {{read of temporary is not allowed in a constant expression outside the expression that created the temporary}}
- // since-cxx11-note@#dr21260-f {{temporary created here}}
+ // since-cxx11-note@#cwg21260-f {{temporary created here}}
static_assert(g.n == 1, "");
static_assert(h.n == 1, "");
// since-cxx11-error at -1 {{static assertion expression is not an integral constant expression}}
// since-cxx11-note at -2 {{read of temporary is not allowed in a constant expression outside the expression that created the temporary}}
- // since-cxx11-note@#dr21260-h {{temporary created here}}
+ // since-cxx11-note@#cwg21260-h {{temporary created here}}
static_assert(i.a.n == 1, "");
// since-cxx11-error at -1 {{static assertion expression is not an integral constant expression}}
// since-cxx11-note at -2 {{read of non-constexpr variable 'i' is not allowed in a constant expression}}
- // since-cxx11-note@#dr21260-i {{declared here}}
+ // since-cxx11-note@#cwg21260-i {{declared here}}
static_assert(j.a.n == 1, "");
// since-cxx11-error at -1 {{static assertion expression is not an integral constant expression}}
// since-cxx11-note at -2 {{read of temporary is not allowed in a constant expression outside the expression that created the temporary}}
- // since-cxx11-note@#dr21260-j {{temporary created here}}
+ // since-cxx11-note@#cwg21260-j {{temporary created here}}
static_assert(k.a.n == 1, "");
#endif
}
-namespace dr2140 { // dr2140: 9
+namespace cwg2140 { // cwg2140: 9
#if __cplusplus >= 201103L
union U { int a; decltype(nullptr) b; };
constexpr int *test(U u) {
@@ -142,7 +142,7 @@ namespace dr2140 { // dr2140: 9
#endif
}
-namespace dr2141 { // dr2141: 17
+namespace cwg2141 { // cwg2141: 17
struct A{};
template <typename T>
@@ -175,34 +175,34 @@ void foo() {
}
}
-namespace dr2157 { // dr2157: 11
+namespace cwg2157 { // cwg2157: 11
#if __cplusplus >= 201103L
enum E : int;
struct X {
- enum dr2157::E : int();
+ enum cwg2157::E : int();
// since-cxx11-error at -1 {{ISO C++ only allows ':' in member enumeration declaration to introduce a fixed underlying type, not an anonymous bit-field}}
};
#endif
}
-// dr2165: na
+// cwg2165: na
-namespace dr2170 { // dr2170: 9
+namespace cwg2170 { // cwg2170: 9
#if __cplusplus >= 201103L
void f() {
- constexpr int arr[3] = {1, 2, 3}; // #dr2170-arr
+ constexpr int arr[3] = {1, 2, 3}; // #cwg2170-arr
struct S {
int get(int n) { return arr[n]; }
const int &get_ref(int n) { return arr[n]; }
// since-cxx11-warning at -1 {{reference to stack memory associated with local variable 'arr' returned}} FIXME
- // since-cxx11-error at -2 {{reference to local variable 'arr' declared in enclosing function 'dr2170::f'}}
- // since-cxx11-note@#dr2170-arr {{'arr' declared here}}
+ // since-cxx11-error at -2 {{reference to local variable 'arr' declared in enclosing function 'cwg2170::f'}}
+ // since-cxx11-note@#cwg2170-arr {{'arr' declared here}}
};
}
#endif
}
-namespace dr2171 { // dr2171: 15
+namespace cwg2171 { // cwg2171: 15
#if __cplusplus >= 201103L
struct NonConstCopy {
@@ -227,40 +227,40 @@ static_assert(!__is_trivially_assignable(NonConstCopy &&, NonConstCopy), "");
static_assert(!__is_trivially_assignable(NonConstCopy &&, NonConstCopy &&), "");
#endif
-} // namespace dr2171
+} // namespace cwg2171
-namespace dr2180 { // dr2180: yes
+namespace cwg2180 { // cwg2180: yes
class A {
- A &operator=(const A &); // #dr2180-A-copy
- A &operator=(A &&); // #dr2180-A-move
+ A &operator=(const A &); // #cwg2180-A-copy
+ A &operator=(A &&); // #cwg2180-A-move
// cxx98-error at -1 {{rvalue references are a C++11 extension}}
};
- struct B : virtual A { // #dr2180-B
+ struct B : virtual A { // #cwg2180-B
B &operator=(const B &);
B &operator=(B &&);
// cxx98-error at -1 {{rvalue references are a C++11 extension}}
virtual void foo() = 0;
};
- B &B::operator=(const B&) = default; // #dr2180-B-copy
+ B &B::operator=(const B&) = default; // #cwg2180-B-copy
// cxx98-error at -1 {{defaulted function definitions are a C++11 extension}}
- // cxx98-error at -2 {{'operator=' is a private member of 'dr2180::A'}}
- // cxx98-note at -3 {{in defaulted copy assignment operator for 'dr2180::B' first required here}}
- // cxx98-note@#dr2180-A-copy {{implicitly declared private here}}
- // since-cxx11-error@#dr2180-B-copy {{defaulting this copy assignment operator would delete it after its first declaration}}
- // since-cxx11-note@#dr2180-B {{copy assignment operator of 'B' is implicitly deleted because base class 'A' has an inaccessible copy assignment operator}}
- B &B::operator=(B&&) = default; // #dr2180-B-move
+ // cxx98-error at -2 {{'operator=' is a private member of 'cwg2180::A'}}
+ // cxx98-note at -3 {{in defaulted copy assignment operator for 'cwg2180::B' first required here}}
+ // cxx98-note@#cwg2180-A-copy {{implicitly declared private here}}
+ // since-cxx11-error@#cwg2180-B-copy {{defaulting this copy assignment operator would delete it after its first declaration}}
+ // since-cxx11-note@#cwg2180-B {{copy assignment operator of 'B' is implicitly deleted because base class 'A' has an inaccessible copy assignment operator}}
+ B &B::operator=(B&&) = default; // #cwg2180-B-move
// cxx98-error at -1 {{rvalue references are a C++11 extension}}
// cxx98-error at -2 {{defaulted function definitions are a C++11 extension}}
- // cxx98-error at -3 {{'operator=' is a private member of 'dr2180::A'}}
- // cxx98-note at -4 {{in defaulted move assignment operator for 'dr2180::B' first required here}}
- // cxx98-note@#dr2180-A-move {{implicitly declared private here}}
- // since-cxx11-error@#dr2180-B-move {{defaulting this move assignment operator would delete it after its first declaration}}
- // since-cxx11-note@#dr2180-B {{move assignment operator of 'B' is implicitly deleted because base class 'A' has an inaccessible move assignment operator}}
+ // cxx98-error at -3 {{'operator=' is a private member of 'cwg2180::A'}}
+ // cxx98-note at -4 {{in defaulted move assignment operator for 'cwg2180::B' first required here}}
+ // cxx98-note@#cwg2180-A-move {{implicitly declared private here}}
+ // since-cxx11-error@#cwg2180-B-move {{defaulting this move assignment operator would delete it after its first declaration}}
+ // since-cxx11-note@#cwg2180-B {{move assignment operator of 'B' is implicitly deleted because base class 'A' has an inaccessible move assignment operator}}
}
-namespace dr2199 { // dr2199: 3.8
- // NB: reusing part of dr407 test
+namespace cwg2199 { // cwg2199: 3.8
+ // NB: reusing part of cwg407 test
namespace A {
struct S {};
}
diff --git a/clang/test/CXX/drs/dr22xx.cpp b/clang/test/CXX/drs/dr22xx.cpp
index 3a13cb0471a75d..797c3ed8546ef1 100644
--- a/clang/test/CXX/drs/dr22xx.cpp
+++ b/clang/test/CXX/drs/dr22xx.cpp
@@ -8,7 +8,7 @@
#if __cplusplus >= 201103L
-namespace dr2211 { // dr2211: 8
+namespace cwg2211 { // cwg2211: 8
void f() {
int a;
auto f = [a](int a) { (void)a; };
@@ -19,15 +19,15 @@ void f() {
}
#endif
-namespace dr2213 { // dr2213: yes
+namespace cwg2213 { // cwg2213: yes
template <typename T, typename U>
struct A;
template <typename U>
struct A<int, U>;
-} // namespace dr2213
+} // namespace cwg2213
-namespace dr2229 { // dr2229: 7
+namespace cwg2229 { // cwg2229: 7
struct AnonBitfieldQualifiers {
const unsigned : 1;
// expected-error at -1 {{anonymous bit-field cannot have qualifiers}}
@@ -43,7 +43,7 @@ struct AnonBitfieldQualifiers {
};
}
-namespace dr2233 { // dr2233: 11
+namespace cwg2233 { // cwg2233: 11
#if __cplusplus >= 201103L
template <typename... T>
void f(int i = 0, T... args) {}
@@ -107,7 +107,7 @@ namespace MultilevelSpecialization {
};
template<> template<int a, int b>
void B<int, int>::f(int i, int (&arr1)[a], int (&arr2)[b]) {}
- // since-cxx11-error at -1 {{out-of-line definition of 'f' does not match any declaration in 'dr2233::MultilevelSpecialization::B<int, int>'}}
+ // since-cxx11-error at -1 {{out-of-line definition of 'f' does not match any declaration in 'cwg2233::MultilevelSpecialization::B<int, int>'}}
template<> template<>
void B<int, int>::f<1, 1>(int i, int (&arr1a)[1], int (&arr2a)[1]) {}
}
@@ -130,12 +130,12 @@ namespace CheckAfterMerging2 {
void h() { f<int>(); }
}
#endif
-} // namespace dr2233
+} // namespace cwg2233
-namespace dr2267 { // dr2267: no
+namespace cwg2267 { // cwg2267: no
#if __cplusplus >= 201103L
struct A {} a;
-struct B { explicit B(const A&); }; // #dr2267-struct-B
+struct B { explicit B(const A&); }; // #cwg2267-struct-B
struct D { D(); };
struct C { explicit operator D(); } c;
@@ -144,9 +144,9 @@ B b1(a);
const B &b2{a}; // FIXME ill-formed
const B &b3(a);
// since-cxx11-error at -1 {{no viable conversion from 'struct A' to 'const B'}}
-// since-cxx11-note@#dr2267-struct-B {{candidate constructor (the implicit copy constructor) not viable: no known conversion from 'struct A' to 'const B &' for 1st argument}}
-// since-cxx11-note@#dr2267-struct-B {{candidate constructor (the implicit move constructor) not viable: no known conversion from 'struct A' to 'B &&' for 1st argument}}
-// since-cxx11-note@#dr2267-struct-B {{explicit constructor is not a candidate}}
+// since-cxx11-note@#cwg2267-struct-B {{candidate constructor (the implicit copy constructor) not viable: no known conversion from 'struct A' to 'const B &' for 1st argument}}
+// since-cxx11-note@#cwg2267-struct-B {{candidate constructor (the implicit move constructor) not viable: no known conversion from 'struct A' to 'B &&' for 1st argument}}
+// since-cxx11-note@#cwg2267-struct-B {{explicit constructor is not a candidate}}
D d1(c);
const D &d2{c}; // FIXME ill-formed
@@ -154,34 +154,34 @@ const D &d3(c); // FIXME ill-formed
#endif
}
-namespace dr2273 { // dr2273: 3.3
+namespace cwg2273 { // cwg2273: 3.3
#if __cplusplus >= 201103L
struct A {
- A(int = 0) = delete; // #dr2273-A
+ A(int = 0) = delete; // #cwg2273-A
};
-struct B : A { // #dr2273-B
+struct B : A { // #cwg2273-B
using A::A;
};
B b;
// since-cxx11-error at -1 {{call to implicitly-deleted default constructor of 'B'}}
-// since-cxx11-note@#dr2273-B {{default constructor of 'B' is implicitly deleted because base class 'A' has a deleted default constructor}}
-// since-cxx11-note@#dr2273-A {{'A' has been explicitly marked deleted here}}
+// since-cxx11-note@#cwg2273-B {{default constructor of 'B' is implicitly deleted because base class 'A' has a deleted default constructor}}
+// since-cxx11-note@#cwg2273-A {{'A' has been explicitly marked deleted here}}
#endif
}
-namespace dr2277 { // dr2277: partial
+namespace cwg2277 { // cwg2277: partial
#if __cplusplus >= 201103L
struct A {
A(int, int = 0);
- void f(int, int = 0); // #dr2277-A-f
+ void f(int, int = 0); // #cwg2277-A-f
};
struct B : A {
B(int);
using A::A;
- void f(int); // #dr2277-B-f
+ void f(int); // #cwg2277-B-f
using A::f;
};
@@ -189,13 +189,13 @@ void g() {
B b{0};
b.f(0); // FIXME: this is well-formed for the same reason as initialization of 'b' above
// since-cxx11-error at -1 {{call to member function 'f' is ambiguous}}
- // since-cxx11-note@#dr2277-A-f {{candidate function}}
- // since-cxx11-note@#dr2277-B-f {{candidate function}}
+ // since-cxx11-note@#cwg2277-A-f {{candidate function}}
+ // since-cxx11-note@#cwg2277-B-f {{candidate function}}
}
#endif
}
-namespace dr2292 { // dr2292: 9
+namespace cwg2292 { // cwg2292: 9
#if __cplusplus >= 201103L
template<typename T> using id = T;
void test(int *p) {
diff --git a/clang/test/CXX/drs/dr23xx.cpp b/clang/test/CXX/drs/dr23xx.cpp
index 812d95a39b638d..db5b7c3cd3c9a2 100644
--- a/clang/test/CXX/drs/dr23xx.cpp
+++ b/clang/test/CXX/drs/dr23xx.cpp
@@ -7,7 +7,7 @@
// RUN: %clang_cc1 -std=c++2c %s -verify=expected,since-cxx11,since-cxx14,since-cxx17,since-cxx20 -fexceptions -fcxx-exceptions -pedantic-errors 2>&1 | FileCheck %s
#if __cplusplus >= 201103L
-namespace dr2303 { // dr2303: 12
+namespace cwg2303 { // cwg2303: 12
template <typename... T>
struct A;
template <>
@@ -17,12 +17,12 @@ struct A<T, Ts...> : A<Ts...> {};
struct B : A<int, int> {};
struct C : A<int, int>, A<int> {};
/* since-cxx11-warning at -1 {{direct base 'A<int>' is inaccessible due to ambiguity:
- struct dr2303::C -> A<int, int> -> A<int>
- struct dr2303::C -> A<int>}} */
+ struct cwg2303::C -> A<int, int> -> A<int>
+ struct cwg2303::C -> A<int>}} */
struct D : A<int>, A<int, int> {};
/* since-cxx11-warning at -1 {{direct base 'A<int>' is inaccessible due to ambiguity:
- struct dr2303::D -> A<int>
- struct dr2303::D -> A<int, int> -> A<int>}} */
+ struct cwg2303::D -> A<int>
+ struct cwg2303::D -> A<int, int> -> A<int>}} */
struct E : A<int, int> {};
struct F : B, E {};
@@ -41,17 +41,17 @@ void g() {
f(D{});
f(F{});
/* since-cxx11-error at -1 {{ambiguous conversion from derived class 'const F' to base class 'const A<int, int>':
- struct dr2303::F -> B -> A<int, int>
- struct dr2303::F -> E -> A<int, int>}} */
+ struct cwg2303::F -> B -> A<int, int>
+ struct cwg2303::F -> E -> A<int, int>}} */
}
-} // namespace dr2303
+} // namespace cwg2303
#endif
-// dr2331: na
-// dr2335 is in dr2335.cxx
+// cwg2331: na
+// cwg2335 is in cwg2335.cxx
#if __cplusplus >= 201103L
-namespace dr2338 { // dr2338: 12
+namespace cwg2338 { // cwg2338: 12
namespace B {
enum E : bool { Zero, One };
static_assert((int)(E)2 == 1, "");
@@ -60,17 +60,17 @@ namespace D {
enum class E : bool { Zero, One };
static_assert((int)(E)2 == 1, "");
} // namespace D
-} // namespace dr2338
+} // namespace cwg2338
#endif
-namespace dr2346 { // dr2346: 11
+namespace cwg2346 { // cwg2346: 11
void test() {
const int i2 = 0;
extern void h2b(int x = i2 + 0); // ok, not odr-use
}
}
-namespace dr2352 { // dr2352: 10
+namespace cwg2352 { // cwg2352: 10
int **p;
const int *const *const &f1() { return p; }
int *const *const &f2() { return p; }
@@ -106,7 +106,7 @@ namespace dr2352 { // dr2352: 10
#endif
}
-namespace dr2353 { // dr2353: 9
+namespace cwg2353 { // cwg2353: 9
struct X {
static const int n = 0;
};
@@ -138,16 +138,16 @@ namespace dr2353 { // dr2353: 9
#pragma clang __debug dump not_use_2
}
-namespace dr2354 { // dr2354: 15
+namespace cwg2354 { // cwg2354: 15
#if __cplusplus >= 201103L
enum alignas(64) A {};
// since-cxx11-error at -1 {{'alignas' attribute cannot be applied to an enumeration}}
enum struct alignas(64) B {};
// since-cxx11-error at -1 {{'alignas' attribute cannot be applied to an enumeration}}
#endif
-} // namespace dr2354
+} // namespace cwg2354
-namespace dr2356 { // dr2356: 4
+namespace cwg2356 { // cwg2356: 4
#if __cplusplus >= 201103L
struct A {
A();
@@ -159,11 +159,11 @@ struct B : A {
B(const B &); // #3
B(B &&) = default; // #4, implicitly deleted
// since-cxx11-warning at -1 {{explicitly defaulted move constructor is implicitly deleted}}
- // since-cxx11-note@#dr2356-X {{move constructor of 'B' is implicitly deleted because field 'x' has a deleted move constructor}}
- // since-cxx11-note@#dr2356-X {{'X' has been explicitly marked deleted here}}
+ // since-cxx11-note@#cwg2356-X {{move constructor of 'B' is implicitly deleted because field 'x' has a deleted move constructor}}
+ // since-cxx11-note@#cwg2356-X {{'X' has been explicitly marked deleted here}}
// since-cxx11-note at -4 {{replace 'default' with 'delete'}}
- struct X { X(X &&) = delete; } x; // #dr2356-X
+ struct X { X(X &&) = delete; } x; // #cwg2356-X
};
extern B b1;
B b2 = static_cast<B&&>(b1); // calls #3: #1, #2, and #4 are not viable
@@ -173,7 +173,7 @@ B b3 = C(); // calls #3
}
#if __cplusplus >= 201402L
-namespace dr2358 { // dr2358: 16
+namespace cwg2358 { // cwg2358: 16
void f2() {
int i = 1;
void g1(int = [xxx=1] { return xxx; }()); // OK
@@ -185,7 +185,7 @@ namespace dr2358 { // dr2358: 16
// CWG2363 was closed as NAD, but its resolution does affirm that
// a friend declaration cannot have an opaque-enumm-specifier.
-namespace dr2363 { // dr2363: yes
+namespace cwg2363 { // cwg2363: yes
#if __cplusplus >= 201103L
enum class E0;
enum E1 : int;
@@ -215,9 +215,9 @@ struct A {
// expected-note at -3 {{remove 'enum class' to befriend an enum}}
};
#endif
-} // namespace dr2363
+} // namespace cwg2363
-namespace dr2370 { // dr2370: no
+namespace cwg2370 { // cwg2370: no
namespace N {
typedef int type;
void g(type);
@@ -229,33 +229,33 @@ class C {
// friend void N::g(type);
friend void N::h(N_type);
};
-} // namespace dr2370
+} // namespace cwg2370
#if __cplusplus >= 201702L
// Otherwise, if the qualified-id std::tuple_size<E> names a complete class
// type **with a member value**, the expression std::tuple_size<E>::value shall
// be a well-formed integral constant expression
-namespace dr2386 { // dr2386: 9
+namespace cwg2386 { // cwg2386: 9
struct Bad1 { int a, b; };
struct Bad2 { int a, b; };
-} // namespace dr2386
+} // namespace cwg2386
namespace std {
template <typename T> struct tuple_size;
-template <> struct tuple_size<dr2386::Bad1> {};
-template <> struct tuple_size<dr2386::Bad2> {
+template <> struct tuple_size<cwg2386::Bad1> {};
+template <> struct tuple_size<cwg2386::Bad2> {
static const int value = 42;
};
} // namespace std
-namespace dr2386 {
+namespace cwg2386 {
void no_value() { auto [x, y] = Bad1(); }
void wrong_value() { auto [x, y] = Bad2(); }
// since-cxx17-error at -1 {{type 'Bad2' decomposes into 42 elements, but only 2 names were provided}}
-} // namespace dr2386
+} // namespace cwg2386
#endif
-// dr2385: na
+// cwg2385: na
-namespace dr2387 { // dr2387: 9
+namespace cwg2387 { // cwg2387: 9
#if __cplusplus >= 201402L
template<int> int a = 0;
extern template int a<0>; // ok
@@ -273,9 +273,9 @@ namespace dr2387 { // dr2387: 9
#endif
}
-// dr2390 is in dr2390.cpp
+// cwg2390 is in cwg2390.cpp
-namespace dr2394 { // dr2394: 15
+namespace cwg2394 { // cwg2394: 15
struct A {};
const A a;
@@ -286,7 +286,7 @@ B b;
}
-namespace dr2396 { // dr2396: no
+namespace cwg2396 { // cwg2396: no
struct A {
struct B;
operator B B::*();
@@ -295,7 +295,7 @@ namespace dr2396 { // dr2396: no
// FIXME: per P1787 "Calling a conversion function" example, all of the
// examples below are well-formed, with B resolving to A::B, but currently
- // it's been resolved to dr2396::B.
+ // it's been resolved to cwg2396::B.
// void f(A a) { a.operator B B::*(); }
// void g(A a) { a.operator decltype(B()) B::*(); }
@@ -303,13 +303,13 @@ namespace dr2396 { // dr2396: no
}
#if __cplusplus >= 201103L
-namespace dr2397 { // dr2397: 17
+namespace cwg2397 { // cwg2397: 17
void foo() {
int a[5];
auto (&b)[5] = a;
auto (*c)[5] = &a;
}
-} // namespace dr2397
+} // namespace cwg2397
#endif
diff --git a/clang/test/CXX/drs/dr24xx.cpp b/clang/test/CXX/drs/dr24xx.cpp
index 4534ed26e56d07..5ffaebda68c132 100644
--- a/clang/test/CXX/drs/dr24xx.cpp
+++ b/clang/test/CXX/drs/dr24xx.cpp
@@ -10,7 +10,7 @@
// expected-no-diagnostics
#endif
-namespace dr2406 { // dr2406: 5
+namespace cwg2406 { // cwg2406: 5
#if __cplusplus >= 201703L
void fallthrough(int n) {
void g(), h(), i();
@@ -45,7 +45,7 @@ void fallthrough(int n) {
#endif
}
-namespace dr2450 { // dr2450: 18 review P2308R1
+namespace cwg2450 { // cwg2450: 18 review P2308R1
#if __cplusplus >= 202302L
struct S {int a;};
template <S s>
@@ -59,7 +59,7 @@ f<{.a= 0}>();
#endif
}
-namespace dr2459 { // dr2459: 18 drafting P2308R1
+namespace cwg2459 { // cwg2459: 18 drafting P2308R1
#if __cplusplus >= 202302L
struct A {
constexpr A(float) {}
@@ -69,7 +69,7 @@ X<1> x;
#endif
}
-namespace dr2445 { // dr2445: 19
+namespace cwg2445 { // cwg2445: 19
#if __cplusplus >= 202002L
template <typename> constexpr bool F = false;
template <typename T> struct A { };
diff --git a/clang/test/CXX/drs/dr25xx.cpp b/clang/test/CXX/drs/dr25xx.cpp
index 46532486e50e53..62b2a0a088cc13 100644
--- a/clang/test/CXX/drs/dr25xx.cpp
+++ b/clang/test/CXX/drs/dr25xx.cpp
@@ -10,9 +10,9 @@
// expected-no-diagnostics
#endif
-// dr2504 is in dr2504.cpp
+// cwg2504 is in cwg2504.cpp
-namespace dr2516 { // dr2516: 3.0
+namespace cwg2516 { // cwg2516: 3.0
// NB: reusing 1482 test
#if __cplusplus >= 201103L
template <typename T> struct S {
@@ -21,9 +21,9 @@ template <typename T> struct S {
enum E2 : S<E2>::I { e };
// since-cxx11-error at -1 {{use of undeclared identifier 'E2'}}
#endif
-} // namespace dr2516
+} // namespace cwg2516
-namespace dr2518 { // dr2518: 17
+namespace cwg2518 { // cwg2518: 17
#if __cplusplus >= 201103L
template <class T>
@@ -32,13 +32,13 @@ void f(T t) {
// cxx11-14-error at -1 {{constexpr if is a C++17 extension}}
static_assert(false, "must be int-sized");
// since-cxx11-error at -1 {{static assertion failed: must be int-sized}}
- // since-cxx11-note@#dr2518-f-c {{in instantiation of function template specialization 'dr2518::f<char>' requested here}}
+ // since-cxx11-note@#cwg2518-f-c {{in instantiation of function template specialization 'cwg2518::f<char>' requested here}}
}
}
void g(char c) {
f(0);
- f(c); // #dr2518-f-c
+ f(c); // #cwg2518-f-c
}
template <typename Ty>
@@ -46,7 +46,7 @@ struct S {
static_assert(false);
// cxx11-14-error at -1 {{'static_assert' with no message is a C++17 extension}}
// since-cxx11-error at -2 {{static assertion failed}}
- // since-cxx11-note@#dr2518-S-double {{in instantiation of template class 'dr2518::S<double>' requested here}}
+ // since-cxx11-note@#cwg2518-S-double {{in instantiation of template class 'cwg2518::S<double>' requested here}}
};
template <>
@@ -58,13 +58,13 @@ struct S<float> {};
int test_specialization() {
S<int> s1;
S<float> s2;
- S<double> s3; // #dr2518-S-double
+ S<double> s3; // #cwg2518-S-double
}
#endif
}
-namespace dr2521 { // dr2521: 17
+namespace cwg2521 { // cwg2521: 17
#if __cplusplus >= 201103L
#pragma clang diagnostic push
#pragma clang diagnostic warning "-Wdeprecated-literal-operator"
@@ -76,61 +76,61 @@ template <char... Chars> decltype(sizeof 0)
operator"" _div();
// since-cxx11-warning at -1 {{identifier '_div' preceded by whitespace in a literal operator declaration is deprecated}}
-using ::dr2521::operator"" _\u03C0___;
-using ::dr2521::operator""_div;
+using ::cwg2521::operator"" _\u03C0___;
+using ::cwg2521::operator""_div;
// since-cxx11-warning at -2 {{identifier '_π___' preceded by whitespace in a literal operator declaration is deprecated}}
#pragma clang diagnostic pop
#endif
-} // namespace dr2521
+} // namespace cwg2521
#if __cplusplus >= 202302L
-namespace dr2553 { // dr2553: 18 review 2023-07-14
+namespace cwg2553 { // cwg2553: 18 review 2023-07-14
struct B {
virtual void f(this B&);
// since-cxx23-error at -1 {{an explicit object parameter cannot appear in a virtual function}}
static void f(this B&);
// since-cxx23-error at -1 {{an explicit object parameter cannot appear in a static function}}
- virtual void g(); // #dr2553-g
+ virtual void g(); // #cwg2553-g
};
struct D : B {
void g(this D&);
// since-cxx23-error at -1 {{an explicit object parameter cannot appear in a virtual function}}
- // since-cxx23-note@#dr2553-g {{overridden virtual function is here}}
+ // since-cxx23-note@#cwg2553-g {{overridden virtual function is here}}
};
}
#endif
#if __cplusplus >= 202302L
-namespace dr2554 { // dr2554: 18 review 2021-12-10
+namespace cwg2554 { // cwg2554: 18 review 2021-12-10
struct B {
- virtual void f(); // #dr2554-g
+ virtual void f(); // #cwg2554-g
};
struct D : B {
void f(this D&);
// since-cxx23-error at -1 {{an explicit object parameter cannot appear in a virtual function}}
- // since-cxx23-note@#dr2554-g {{overridden virtual function is here}}
+ // since-cxx23-note@#cwg2554-g {{overridden virtual function is here}}
};
struct D2 : B {
void f(this B&);
// since-cxx23-error at -1 {{an explicit object parameter cannot appear in a virtual function}}
- // since-cxx23-note@#dr2554-g {{overridden virtual function is here}}
+ // since-cxx23-note@#cwg2554-g {{overridden virtual function is here}}
};
struct T {};
struct D3 : B {
void f(this T&);
// since-cxx23-error at -1 {{an explicit object parameter cannot appear in a virtual function}}
- // since-cxx23-note@#dr2554-g {{overridden virtual function is here}}
+ // since-cxx23-note@#cwg2554-g {{overridden virtual function is here}}
};
}
#endif
#if __cplusplus >= 202302L
-namespace dr2561 { // dr2561: 18 review 2023-11-09
+namespace cwg2561 { // cwg2561: 18 review 2023-11-09
struct C {
constexpr C(auto) { }
};
@@ -145,7 +145,7 @@ void foo() {
#endif
-namespace dr2565 { // dr2565: 16 open 2023-06-07
+namespace cwg2565 { // cwg2565: 16 open 2023-06-07
#if __cplusplus >= 202002L
template<typename T>
concept C = requires (typename T::type x) {
@@ -165,28 +165,28 @@ namespace dr2565 { // dr2565: 16 open 2023-06-07
static_assert(is_referenceable<int>::value);
template<typename T, typename U>
- concept TwoParams = requires (T *a, U b){ true;}; // #dr2565-TPC
+ concept TwoParams = requires (T *a, U b){ true;}; // #cwg2565-TPC
template<typename T, typename U>
- requires TwoParams<T, U> // #dr2565-TPSREQ
+ requires TwoParams<T, U> // #cwg2565-TPSREQ
struct TwoParamsStruct{};
using TPSU = TwoParamsStruct<void, void>;
// since-cxx20-error at -1 {{constraints not satisfied for class template 'TwoParamsStruct'}}
- // since-cxx20-note@#dr2565-TPSREQ {{because 'TwoParams<void, void>' evaluated to false}}
- // since-cxx20-note@#dr2565-TPC {{because 'b' would be invalid: argument may not have 'void' type}}
+ // since-cxx20-note@#cwg2565-TPSREQ {{because 'TwoParams<void, void>' evaluated to false}}
+ // since-cxx20-note@#cwg2565-TPC {{because 'b' would be invalid: argument may not have 'void' type}}
template<typename T, typename ...U>
- concept Variadic = requires (U* ... a, T b){ true;}; // #dr2565-VC
+ concept Variadic = requires (U* ... a, T b){ true;}; // #cwg2565-VC
template<typename T, typename ...U>
- requires Variadic<T, U...> // #dr2565-VSREQ
+ requires Variadic<T, U...> // #cwg2565-VSREQ
struct VariadicStruct{};
using VSU = VariadicStruct<void, int, char, double>;
// since-cxx20-error at -1 {{constraints not satisfied for class template 'VariadicStruct'}}
- // since-cxx20-note@#dr2565-VSREQ {{because 'Variadic<void, int, char, double>' evaluated to false}}
- // since-cxx20-note@#dr2565-VC {{because 'b' would be invalid: argument may not have 'void' type}}
+ // since-cxx20-note@#cwg2565-VSREQ {{because 'Variadic<void, int, char, double>' evaluated to false}}
+ // since-cxx20-note@#cwg2565-VC {{because 'b' would be invalid: argument may not have 'void' type}}
template<typename T>
concept ErrorRequires = requires (ErrorRequires auto x) {
@@ -211,7 +211,7 @@ namespace dr2565 { // dr2565: 16 open 2023-06-07
#endif
}
-namespace dr2583 { // dr2583: 19
+namespace cwg2583 { // cwg2583: 19
#if __cplusplus >= 201103L
struct A {
int i;
@@ -236,9 +236,9 @@ union V {
static_assert(!__is_layout_compatible(A, B), "");
static_assert(__is_layout_compatible(U, V), "");
#endif
-} // namespace dr2583
+} // namespace cwg2583
-namespace dr2598 { // dr2598: 18
+namespace cwg2598 { // cwg2598: 18
#if __cplusplus >= 201103L
struct NonLiteral {
NonLiteral();
diff --git a/clang/test/CXX/drs/dr26xx.cpp b/clang/test/CXX/drs/dr26xx.cpp
index f151c9eea051a3..f7a05b9827a235 100644
--- a/clang/test/CXX/drs/dr26xx.cpp
+++ b/clang/test/CXX/drs/dr26xx.cpp
@@ -7,7 +7,7 @@
// RUN: %clang_cc1 -std=c++2c -triple x86_64-unknown-unknown %s -verify=expected,since-cxx11,since-cxx20,since-cxx23
-namespace dr2621 { // dr2621: 16
+namespace cwg2621 { // cwg2621: 16
#if __cplusplus >= 202002L
enum class E { a };
namespace One {
@@ -16,7 +16,7 @@ using enum E_t; // typedef ok
auto v = a;
}
namespace Two {
-using dr2621::E;
+using cwg2621::E;
int E; // we see this
using enum E;
// since-cxx20-error at -1 {{unknown type name E}}
@@ -24,32 +24,32 @@ using enum E;
#endif
}
-namespace dr2628 { // dr2628: no
+namespace cwg2628 { // cwg2628: no
// this was reverted for the 16.x release
// due to regressions, see the issue for more details:
// https://github.com/llvm/llvm-project/issues/60777
#if __cplusplus >= 202002L
template <bool A = false, bool B = false>
struct foo {
- // The expected notes below should be removed when dr2628 is fully implemented again
- constexpr foo() requires (!A && !B) = delete; // #dr2628-ctor-1
- constexpr foo() requires (A || B) = delete; // #dr2628-ctor-2
+ // The expected notes below should be removed when cwg2628 is fully implemented again
+ constexpr foo() requires (!A && !B) = delete; // #cwg2628-ctor-1
+ constexpr foo() requires (A || B) = delete; // #cwg2628-ctor-2
};
void f() {
- // The FIXME's below should be the expected errors when dr2628 is
+ // The FIXME's below should be the expected errors when cwg2628 is
// fully implemented again.
- foo fooable; // #dr2628-fooable
+ foo fooable; // #cwg2628-fooable
// since-cxx20-error at -1 {{ambiguous deduction for template arguments of 'foo'}}
- // since-cxx20-note@#dr2628-ctor-1 {{candidate function [with A = false, B = false]}}
- // since-cxx20-note@#dr2628-ctor-2 {{candidate function [with A = false, B = false]}}
- // FIXME-since-cxx20-error@#dr2628-fooable {{call to deleted}}
- // FIXME-since-cxx20-note@#dr2628-ctor {{marked deleted here}}
+ // since-cxx20-note@#cwg2628-ctor-1 {{candidate function [with A = false, B = false]}}
+ // since-cxx20-note@#cwg2628-ctor-2 {{candidate function [with A = false, B = false]}}
+ // FIXME-since-cxx20-error@#cwg2628-fooable {{call to deleted}}
+ // FIXME-since-cxx20-note@#cwg2628-ctor {{marked deleted here}}
}
#endif
}
-namespace dr2631 { // dr2631: 16
+namespace cwg2631 { // cwg2631: 16
#if __cplusplus >= 202002L
constexpr int g();
consteval int f() {
@@ -67,7 +67,7 @@ namespace dr2631 { // dr2631: 16
#endif
}
-namespace dr2635 { // dr2635: 16
+namespace cwg2635 { // cwg2635: 16
#if __cplusplus >= 202002L
template<typename T>
concept UnaryC = true;
@@ -97,9 +97,9 @@ void TemplUse() {
#endif
}
-// dr2636: na
+// cwg2636: na
-namespace dr2640 { // dr2640: 16
+namespace cwg2640 { // cwg2640: 16
int \N{Λ} = 0;
// expected-error at -1 {{'Λ' is not a valid Unicode character name}}
@@ -113,18 +113,18 @@ const char* emoji = "\N{🤡}";
// expected-note at -6 {{did you mean BAT ('🦇' U+1F987)?}}
#define z(x) 0
-#define dr2640_a z(
-int x = dr2640_a\N{abc});
+#define cwg2640_a z(
+int x = cwg2640_a\N{abc});
// expected-error at -1 {{'abc' is not a valid Unicode character name}}
-int y = dr2640_a\N{LOTUS});
+int y = cwg2640_a\N{LOTUS});
// expected-error at -1 {{character <U+1FAB7> not allowed in an identifier}}
-// expected-error at -2 {{use of undeclared identifier 'dr2640_a🪷'}}
+// expected-error at -2 {{use of undeclared identifier 'cwg2640_a🪷'}}
// expected-error at -3 {{extraneous ')' before ';'}}
}
-// dr2642: na
+// cwg2642: na
-namespace dr2644 { // dr2644: 8
+namespace cwg2644 { // cwg2644: 8
#if __cplusplus >= 201103L
auto z = [a = 42](int a) {
// cxx11-warning at -1 {{initialized lambda captures are a C++14 extension}}
@@ -136,20 +136,20 @@ auto z = [a = 42](int a) {
}
#if __cplusplus >= 202302L
-namespace dr2650 { // dr2650: 17
+namespace cwg2650 { // cwg2650: 17
template <class T, T> struct S {};
-template <class T> int f(S<T, T{}>*); // #dr2650-f
+template <class T> int f(S<T, T{}>*); // #cwg2650-f
class X {
int m;
};
int i0 = f<X>(0);
// since-cxx23-error at -1 {{no matching function for call to 'f'}}
-// since-cxx23-note@#dr2650-f {{type 'X' of non-type template parameter is not a structural type}}
+// since-cxx23-note@#cwg2650-f {{type 'X' of non-type template parameter is not a structural type}}
}
#endif
#if __cplusplus >= 202302L
-namespace dr2653 { // dr2653: 18
+namespace cwg2653 { // cwg2653: 18
struct Test { void f(this const auto& = Test{}); };
// since-cxx23-error at -1 {{the explicit object parameter cannot have a default argument}}
auto L = [](this const auto& = Test{}){};
@@ -157,7 +157,7 @@ namespace dr2653 { // dr2653: 18
}
#endif
-namespace dr2654 { // dr2654: 16
+namespace cwg2654 { // cwg2654: 16
void f() {
int neck, tail;
volatile int brachiosaur;
@@ -167,7 +167,7 @@ void f() {
}
}
-namespace dr2681 { // dr2681: 17
+namespace cwg2681 { // cwg2681: 17
#if __cplusplus >= 202002L
using size_t = decltype(sizeof(int));
@@ -180,7 +180,7 @@ struct I {
volatile T array[N];
};
template<size_t N>
-struct J { // #dr2681-J
+struct J { // #cwg2681-J
unsigned char array[N];
};
@@ -191,13 +191,13 @@ static_assert(__is_same(decltype(i), I<char, 4>));
J j = { "ghi" };
// since-cxx20-error at -1 {{no viable constructor or deduction guide}}
-// since-cxx20-note@#dr2681-J {{candidate template ignored: could not match 'J<N>' against 'const char *'}}
-// since-cxx20-note@#dr2681-J {{candidate template ignored: could not match 'const unsigned char' against 'const char'}}
-// since-cxx20-note@#dr2681-J {{candidate function template not viable: requires 0 arguments, but 1 was provided}}
+// since-cxx20-note@#cwg2681-J {{candidate template ignored: could not match 'J<N>' against 'const char *'}}
+// since-cxx20-note@#cwg2681-J {{candidate template ignored: could not match 'const unsigned char' against 'const char'}}
+// since-cxx20-note@#cwg2681-J {{candidate function template not viable: requires 0 arguments, but 1 was provided}}
#endif
}
-namespace dr2672 { // dr2672: 18
+namespace cwg2672 { // cwg2672: 18
#if __cplusplus >= 202002L
template <class T>
void f(T) requires requires { []() { T::invalid; } (); };
@@ -205,8 +205,8 @@ void f(T) requires requires { []() { T::invalid; } (); };
// since-cxx20-note at -2 {{while substituting into a lambda expression here}}
// since-cxx20-note at -3 {{in instantiation of requirement here}}
// since-cxx20-note at -4 {{while substituting template arguments into constraint expression here}}
-// since-cxx20-note@#dr2672-f-0 {{while checking constraint satisfaction for template 'f<int>' required here}}
-// since-cxx20-note@#dr2672-f-0 {{in instantiation of function template specialization 'dr2672::f<int>' requested here}}
+// since-cxx20-note@#cwg2672-f-0 {{while checking constraint satisfaction for template 'f<int>' required here}}
+// since-cxx20-note@#cwg2672-f-0 {{in instantiation of function template specialization 'cwg2672::f<int>' requested here}}
void f(...);
template <class T>
@@ -216,14 +216,14 @@ void bar(T) requires requires {
void bar(...);
void m() {
- f(0); // #dr2672-f-0
+ f(0); // #cwg2672-f-0
bar(0);
}
#endif
}
#if __cplusplus >= 202302L
-namespace dr2687 { // dr2687: 18
+namespace cwg2687 { // cwg2687: 18
struct S{
void f(int);
static void g(int);
@@ -232,7 +232,7 @@ struct S{
void test() {
(&S::f)(1);
- // since-cxx23-error at -1 {{called object type 'void (dr2687::S::*)(int)' is not a function or function pointer}}
+ // since-cxx23-error at -1 {{called object type 'void (cwg2687::S::*)(int)' is not a function or function pointer}}
(&S::g)(1);
(&S::h)(S(), 1);
}
diff --git a/clang/test/CXX/drs/dr27xx.cpp b/clang/test/CXX/drs/dr27xx.cpp
index c956c4355abd37..0434427d6c92a3 100644
--- a/clang/test/CXX/drs/dr27xx.cpp
+++ b/clang/test/CXX/drs/dr27xx.cpp
@@ -10,7 +10,7 @@
// expected-no-diagnostics
#endif
-namespace dr2759 { // dr2759: 19
+namespace cwg2759 { // cwg2759: 19
#if __cplusplus >= 201103L
struct CStruct {
@@ -91,18 +91,18 @@ static_assert(!__is_layout_compatible(UnionLayout, UnionLayout3), "");
static_assert(!__is_layout_compatible(StructWithAnonUnion, StructWithAnonUnion2), "");
static_assert(!__is_layout_compatible(StructWithAnonUnion, StructWithAnonUnion3), "");
#endif
-} // namespace dr2759
+} // namespace cwg2759
-namespace dr2789 { // dr2789: 18
+namespace cwg2789 { // cwg2789: 18
#if __cplusplus >= 202302L
template <typename T = int>
struct Base {
- constexpr void g(); // #dr2789-g1
+ constexpr void g(); // #cwg2789-g1
};
template <typename T = int>
struct Base2 {
- constexpr void g() requires true; // #dr2789-g2
+ constexpr void g() requires true; // #cwg2789-g2
};
template <typename T = int>
@@ -119,13 +119,13 @@ void test() {
s.f();
s.g();
// since-cxx23-error at -1 {{call to member function 'g' is ambiguous}}
- // since-cxx23-note@#dr2789-g1 {{candidate function}}
- // since-cxx23-note@#dr2789-g2 {{candidate function}}
+ // since-cxx23-note@#cwg2789-g1 {{candidate function}}
+ // since-cxx23-note@#cwg2789-g2 {{candidate function}}
}
#endif
}
-namespace dr2798 { // dr2798: 17
+namespace cwg2798 { // cwg2798: 17
#if __cpp_static_assert >= 202306
struct string {
constexpr string() {
@@ -147,5 +147,5 @@ consteval X f() { return {}; }
static_assert(false, f().s);
// since-cxx26-error at -1 {{static assertion failed: Hello}}
#endif
-} // namespace dr2798
+} // namespace cwg2798
diff --git a/clang/test/CXX/drs/dr28xx.cpp b/clang/test/CXX/drs/dr28xx.cpp
index 9b21d3410a0499..4d9b0c76758d53 100644
--- a/clang/test/CXX/drs/dr28xx.cpp
+++ b/clang/test/CXX/drs/dr28xx.cpp
@@ -10,7 +10,7 @@
// expected-no-diagnostics
#endif
-namespace dr2847 { // dr2847: 19
+namespace cwg2847 { // cwg2847: 19
#if __cplusplus >= 202002L
@@ -57,9 +57,9 @@ void B<int>::g() requires true;
#endif
-} // namespace dr2847
+} // namespace cwg2847
-namespace dr2858 { // dr2858: 19
+namespace cwg2858 { // cwg2858: 19
#if __cplusplus > 202302L
@@ -80,4 +80,4 @@ struct A {
#endif
-} // namespace dr2858
+} // namespace cwg2858
diff --git a/clang/test/CXX/drs/dr2xx.cpp b/clang/test/CXX/drs/dr2xx.cpp
index cbb8734e10c649..e655e7226d51d6 100644
--- a/clang/test/CXX/drs/dr2xx.cpp
+++ b/clang/test/CXX/drs/dr2xx.cpp
@@ -16,7 +16,7 @@ typedef __SIZE_TYPE__ size_t;
#define fold
#endif
-namespace dr200 { // dr200: dup 214
+namespace cwg200 { // cwg200: dup 214
template <class T> T f(int);
template <class T, class U> T f(U) = delete;
// cxx98-error at -1 {{deleted function definitions are a C++11 extension}}
@@ -26,9 +26,9 @@ namespace dr200 { // dr200: dup 214
}
}
-// dr201 is in dr201.cpp
+// cwg201 is in cwg201.cpp
-namespace dr202 { // dr202: 3.1
+namespace cwg202 { // cwg202: 3.1
template<typename T> T f();
template<int (*g)()> struct X {
int arr[fold(g == &f<int>) ? 1 : -1];
@@ -36,19 +36,19 @@ namespace dr202 { // dr202: 3.1
template struct X<f>;
}
-// FIXME (export) dr204: no
+// FIXME (export) cwg204: no
-namespace dr206 { // dr206: yes
- struct S; // #dr206-S
+namespace cwg206 { // cwg206: yes
+ struct S; // #cwg206-S
template<typename T> struct Q { S s; };
// expected-error at -1 {{field has incomplete type 'S'}}
- // expected-note@#dr206-S {{forward declaration of 'dr206::S'}}
+ // expected-note@#cwg206-S {{forward declaration of 'cwg206::S'}}
template<typename T> void f() { S s; }
// expected-error at -1 {{variable has incomplete type 'S'}}
- // expected-note@#dr206-S {{forward declaration of 'dr206::S'}}
+ // expected-note@#cwg206-S {{forward declaration of 'cwg206::S'}}
}
-namespace dr207 { // dr207: yes
+namespace cwg207 { // cwg207: yes
class A {
protected:
static void f() {}
@@ -63,22 +63,22 @@ namespace dr207 { // dr207: yes
};
}
-// dr208 FIXME: write codegen test
+// cwg208 FIXME: write codegen test
-namespace dr209 { // dr209: 3.2
+namespace cwg209 { // cwg209: 3.2
class A {
- void f(); // #dr209-A-f
+ void f(); // #cwg209-A-f
};
class B {
friend void A::f();
- // expected-error at -1 {{friend function 'f' is a private member of 'dr209::A'}}
- // expected-note@#dr209-A-f {{implicitly declared private here}}
+ // expected-error at -1 {{friend function 'f' is a private member of 'cwg209::A'}}
+ // expected-note@#cwg209-A-f {{implicitly declared private here}}
};
}
-// dr210 is in dr210.cpp
+// cwg210 is in cwg210.cpp
-namespace dr211 { // dr211: yes
+namespace cwg211 { // cwg211: yes
struct A {
A() try {
throw 0;
@@ -89,26 +89,26 @@ namespace dr211 { // dr211: yes
};
}
-namespace dr213 { // dr213: yes
+namespace cwg213 { // cwg213: yes
template <class T> struct A : T {
void h(T t) {
char &r1 = f(t);
int &r2 = g(t);
// expected-error at -1 {{explicit qualification required to use member 'g' from dependent base class}}
- // expected-note@#dr213-instantiation {{in instantiation of member function 'dr213::A<dr213::B>::h' requested here}}
- // expected-note@#dr213-B-g {{member is declared here}}
+ // expected-note@#cwg213-instantiation {{in instantiation of member function 'cwg213::A<cwg213::B>::h' requested here}}
+ // expected-note@#cwg213-B-g {{member is declared here}}
}
};
struct B {
int &f(B);
- int &g(B); // #dr213-B-g
+ int &g(B); // #cwg213-B-g
};
char &f(B);
- template void A<B>::h(B); // #dr213-instantiation
+ template void A<B>::h(B); // #cwg213-instantiation
}
-namespace dr214 { // dr214: yes
+namespace cwg214 { // cwg214: yes
template<typename T, typename U> T checked_cast(U from) { U::error; }
template<typename T, typename U> T checked_cast(U *from);
class C {};
@@ -121,7 +121,7 @@ namespace dr214 { // dr214: yes
}
}
-namespace dr215 { // dr215: 2.9
+namespace cwg215 { // cwg215: 2.9
template<typename T> class X {
friend void T::foo();
int n;
@@ -131,7 +131,7 @@ namespace dr215 { // dr215: 2.9
};
}
-namespace dr216 { // dr216: no
+namespace cwg216 { // cwg216: no
// FIXME: Should reject this: 'f' has linkage but its type does not,
// and 'f' is odr-used but not defined in this TU.
typedef enum { e } *E;
@@ -147,7 +147,7 @@ namespace dr216 { // dr216: no
void g(S s, S::E e) { s.f(e); }
}
-namespace dr217 { // dr217: yes
+namespace cwg217 { // cwg217: yes
template<typename T> struct S {
void f(int);
};
@@ -155,7 +155,7 @@ namespace dr217 { // dr217: yes
// expected-error at -1 {{default arguments cannot be added to an out-of-line definition of a member of a class template}}
}
-namespace dr218 { // dr218: yes
+namespace cwg218 { // cwg218: yes
// NB: also dup 405
namespace A {
struct S {};
@@ -219,12 +219,12 @@ namespace dr218 { // dr218: yes
void testG(G::C<G::X::A, G::Y::B> gc) { f(gc); }
}
-// dr219: na
-// dr220: na
+// cwg219: na
+// cwg220: na
-namespace dr221 { // dr221: 3.6
- struct A { // #dr221-S
- A &operator=(int&); // #dr221-S-copy-assign
+namespace cwg221 { // cwg221: 3.6
+ struct A { // #cwg221-S
+ A &operator=(int&); // #cwg221-S-copy-assign
A &operator+=(int&);
static A &operator=(A&, double&);
// expected-error at -1 {{overloaded 'operator=' cannot be a static member function}}
@@ -243,20 +243,20 @@ namespace dr221 { // dr221: 3.6
a += n;
a = c;
// expected-error at -1 {{no viable overloaded '='}}
- // expected-note@#dr221-S-copy-assign {{candidate function not viable: no known conversion from 'char' to 'int &' for 1st argument}}
- // since-cxx11-note@#dr221-S {{candidate function (the implicit move assignment operator) not viable: no known conversion from 'char' to 'A' for 1st argument}}
- // expected-note@#dr221-S {{candidate function (the implicit copy assignment operator) not viable: no known conversion from 'char' to 'const A' for 1st argument}}
+ // expected-note@#cwg221-S-copy-assign {{candidate function not viable: no known conversion from 'char' to 'int &' for 1st argument}}
+ // since-cxx11-note@#cwg221-S {{candidate function (the implicit move assignment operator) not viable: no known conversion from 'char' to 'A' for 1st argument}}
+ // expected-note@#cwg221-S {{candidate function (the implicit copy assignment operator) not viable: no known conversion from 'char' to 'const A' for 1st argument}}
a += c;
a = f;
// expected-error at -1 {{no viable overloaded '='}}
- // expected-note@#dr221-S-copy-assign {{candidate function not viable: no known conversion from 'float' to 'int &' for 1st argument}}
- // since-cxx11-note@#dr221-S {{candidate function (the implicit move assignment operator) not viable: no known conversion from 'float' to 'A' for 1st argument}}
- // expected-note@#dr221-S {{candidate function (the implicit copy assignment operator) not viable: no known conversion from 'float' to 'const A' for 1st argument}}
+ // expected-note@#cwg221-S-copy-assign {{candidate function not viable: no known conversion from 'float' to 'int &' for 1st argument}}
+ // since-cxx11-note@#cwg221-S {{candidate function (the implicit move assignment operator) not viable: no known conversion from 'float' to 'A' for 1st argument}}
+ // expected-note@#cwg221-S {{candidate function (the implicit copy assignment operator) not viable: no known conversion from 'float' to 'const A' for 1st argument}}
a += f;
}
}
-namespace dr222 { // dr222: dup 637
+namespace cwg222 { // cwg222: dup 637
void f(int a, int b, int c, int *x) {
#pragma clang diagnostic push
#pragma clang diagnostic warning "-Wunsequenced"
@@ -276,9 +276,9 @@ namespace dr222 { // dr222: dup 637
}
}
-// dr223: na
+// cwg223: na
-namespace dr224 { // dr224: 16
+namespace cwg224 { // cwg224: 16
namespace example1 {
template <class T> class A {
typedef int type;
@@ -286,7 +286,7 @@ namespace dr224 { // dr224: 16
A<T>::type b;
A<T*>::type c;
// cxx98-17-error at -1 {{missing 'typename' prior to dependent type name A<T *>::type; implicit 'typename' is a C++20 extension}}
- ::dr224::example1::A<T>::type d;
+ ::cwg224::example1::A<T>::type d;
class B {
typedef int type;
@@ -295,7 +295,7 @@ namespace dr224 { // dr224: 16
A<T>::type b;
A<T*>::type c;
// cxx98-17-error at -1 {{missing 'typename' prior to dependent type name A<T *>::type; implicit 'typename' is a C++20 extension}}
- ::dr224::example1::A<T>::type d;
+ ::cwg224::example1::A<T>::type d;
B::type e;
A<T>::B::type f;
@@ -348,15 +348,15 @@ namespace dr224 { // dr224: 16
}
}
-// dr225: yes
-template<typename T> void dr225_f(T t) { dr225_g(t); }
-// expected-error at -1 {{call to function 'dr225_g' that is neither visible in the template definition nor found by argument-dependent lookup}}
-// expected-note@#dr225-f {{in instantiation of function template specialization 'dr225_f<int>' requested here}}
-// expected-note@#dr225-g {{'dr225_g' should be declared prior to the call site}}
-void dr225_g(int); // #dr225-g
-template void dr225_f(int); // #dr225-f
+// cwg225: yes
+template<typename T> void cwg225_f(T t) { cwg225_g(t); }
+// expected-error at -1 {{call to function 'cwg225_g' that is neither visible in the template definition nor found by argument-dependent lookup}}
+// expected-note@#cwg225-f {{in instantiation of function template specialization 'cwg225_f<int>' requested here}}
+// expected-note@#cwg225-g {{'cwg225_g' should be declared prior to the call site}}
+void cwg225_g(int); // #cwg225-g
+template void cwg225_f(int); // #cwg225-f
-namespace dr226 { // dr226: no
+namespace cwg226 { // cwg226: no
// FIXME: This appears to be wrong: default arguments for function templates
// are listed as a defect (in c++98) not an extension. EDG accepts them in
// strict c++98 mode.
@@ -406,14 +406,14 @@ namespace dr226 { // dr226: no
int x = foo(0, 0);
}
-void dr227(bool b) { // dr227: yes
+void cwg227(bool b) { // cwg227: yes
if (b)
int n;
else
int n;
}
-namespace dr228 { // dr228: yes
+namespace cwg228 { // cwg228: yes
template <class T> struct X {
void f();
};
@@ -422,50 +422,50 @@ namespace dr228 { // dr228: yes
};
}
-namespace dr229 { // dr229: 2.9
+namespace cwg229 { // cwg229: 2.9
template<typename T> void f();
template<typename T> void f<T*>() {}
// expected-error at -1 {{function template partial specialization is not allowed}}
template<> void f<int>() {}
}
-namespace dr230 { // dr230: 3.0
+namespace cwg230 { // cwg230: 3.0
struct S {
S() { f(); }
- // expected-warning at -1 {{call to pure virtual member function 'f' has undefined behavior; overrides of 'f' in subclasses are not available in the constructor of 'dr230::S'}}
- // expected-note@#dr230-f {{'f' declared here}}
- virtual void f() = 0; // #dr230-f
+ // expected-warning at -1 {{call to pure virtual member function 'f' has undefined behavior; overrides of 'f' in subclasses are not available in the constructor of 'cwg230::S'}}
+ // expected-note@#cwg230-f {{'f' declared here}}
+ virtual void f() = 0; // #cwg230-f
};
}
-namespace dr231 { // dr231: yes
+namespace cwg231 { // cwg231: yes
namespace outer {
namespace inner {
- int i; // #dr231-i
+ int i; // #cwg231-i
}
void f() { using namespace inner; }
int j = i;
// expected-error at -1 {{use of undeclared identifier 'i'; did you mean 'inner::i'?}}
- // expected-note@#dr231-i {{'inner::i' declared here}}
+ // expected-note@#cwg231-i {{'inner::i' declared here}}
}
}
-// dr234: na
-// dr235: na
+// cwg234: na
+// cwg235: na
-namespace dr236 { // dr236: 3.2
+namespace cwg236 { // cwg236: 3.2
void *p = int();
// cxx98-warning at -1 {{expression which evaluates to zero treated as a null pointer constant of type 'void *'}}
// since-cxx11-error at -2 {{cannot initialize a variable of type 'void *' with an rvalue of type 'int'}}
}
-namespace dr237 { // dr237: dup 470
+namespace cwg237 { // cwg237: dup 470
template<typename T> struct A { void f() { T::error; } };
template<typename T> struct B : A<T> {};
template struct B<int>; // ok
}
-namespace dr239 { // dr239: yes
+namespace cwg239 { // cwg239: yes
namespace NS {
class T {};
void f(T);
@@ -481,64 +481,64 @@ namespace dr239 { // dr239: yes
}
}
-// dr240: dup 616
+// cwg240: dup 616
-namespace dr241 { // dr241: yes
+namespace cwg241 { // cwg241: yes
namespace A {
struct B {};
- template <int X> void f(); // #dr241-A-f
+ template <int X> void f(); // #cwg241-A-f
template <int X> void g(B);
}
namespace C {
- template <class T> void f(T t); // #dr241-C-f
- template <class T> void g(T t); // #dr241-C-g
+ template <class T> void f(T t); // #cwg241-C-f
+ template <class T> void g(T t); // #cwg241-C-g
}
void h(A::B b) {
f<3>(b);
// expected-error at -1 {{no matching function for call to 'f'}}
- // expected-note@#dr241-A-f {{candidate function template not viable: requires 0 arguments, but 1 was provided}}
+ // expected-note@#cwg241-A-f {{candidate function template not viable: requires 0 arguments, but 1 was provided}}
// cxx98-17-error at -3 {{use of function template name with no prior declaration in function call with explicit template arguments is a C++20 extension}}
g<3>(b);
// cxx98-17-error at -1 {{use of function template name with no prior declaration in function call with explicit template arguments is a C++20 extension}}
A::f<3>(b);
// expected-error at -1 {{no matching function for call to 'f'}}
- // expected-note@#dr241-A-f {{candidate function template not viable: requires 0 arguments, but 1 was provided}}
+ // expected-note@#cwg241-A-f {{candidate function template not viable: requires 0 arguments, but 1 was provided}}
A::g<3>(b);
C::f<3>(b);
// expected-error at -1 {{no matching function for call to 'f'}}
- // expected-note@#dr241-C-f {{candidate template ignored: invalid explicitly-specified argument for template parameter 'T'}}
+ // expected-note@#cwg241-C-f {{candidate template ignored: invalid explicitly-specified argument for template parameter 'T'}}
C::g<3>(b);
// expected-error at -1 {{no matching function for call to 'g'}}
- // expected-note@#dr241-C-g {{candidate template ignored: invalid explicitly-specified argument for template parameter 'T'}}
+ // expected-note@#cwg241-C-g {{candidate template ignored: invalid explicitly-specified argument for template parameter 'T'}}
using C::f;
using C::g;
f<3>(b);
// expected-error at -1 {{no matching function for call to 'f'}}
- // expected-note@#dr241-C-f {{candidate template ignored: invalid explicitly-specified argument for template parameter 'T'}}
- // expected-note@#dr241-A-f {{candidate function template not viable: requires 0 arguments, but 1 was provided}}
+ // expected-note@#cwg241-C-f {{candidate template ignored: invalid explicitly-specified argument for template parameter 'T'}}
+ // expected-note@#cwg241-A-f {{candidate function template not viable: requires 0 arguments, but 1 was provided}}
g<3>(b);
}
}
-namespace dr243 { // dr243: yes
+namespace cwg243 { // cwg243: yes
struct B;
struct A {
- A(B); // #dr243-A
+ A(B); // #cwg243-A
};
struct B {
- operator A() = delete; // #dr243-B
+ operator A() = delete; // #cwg243-B
// cxx98-error at -1 {{deleted function definitions are a C++11 extension}}
} b;
A a1(b);
A a2 = b;
// expected-error at -1 {{conversion from 'struct B' to 'A' is ambiguous}}
- // expected-note@#dr243-A {{candidate constructor}}
- // expected-note@#dr243-B {{candidate function has been explicitly deleted}}
+ // expected-note@#cwg243-A {{candidate constructor}}
+ // expected-note@#cwg243-B {{candidate function has been explicitly deleted}}
}
-namespace dr244 { // dr244: 11
- // NB: this test is reused by dr399
- struct B {}; // #dr244-B
+namespace cwg244 { // cwg244: 11
+ // NB: this test is reused by cwg399
+ struct B {}; // #cwg244-B
struct D : B {};
D D_object;
@@ -547,18 +547,18 @@ namespace dr244 { // dr244: 11
void f() {
D_object.~B();
- // expected-error at -1 {{destructor type 'dr244::B' in object destruction expression does not match the type 'D' of the object being destroyed}}
- // expected-note@#dr244-B {{type 'dr244::B' found by destructor name lookup}}
+ // expected-error at -1 {{destructor type 'cwg244::B' in object destruction expression does not match the type 'D' of the object being destroyed}}
+ // expected-note@#cwg244-B {{type 'cwg244::B' found by destructor name lookup}}
D_object.B::~B();
D_object.D::~B(); // FIXME: Missing diagnostic for this.
B_ptr->~B();
B_ptr->~B_alias();
B_ptr->B_alias::~B();
B_ptr->B_alias::~B_alias();
- B_ptr->dr244::~B();
- // expected-error at -1 {{qualified member access refers to a member in namespace 'dr244'}}
- B_ptr->dr244::~B_alias();
- // expected-error at -1 {{qualified member access refers to a member in namespace 'dr244'}}
+ B_ptr->cwg244::~B();
+ // expected-error at -1 {{qualified member access refers to a member in namespace 'cwg244'}}
+ B_ptr->cwg244::~B_alias();
+ // expected-error at -1 {{qualified member access refers to a member in namespace 'cwg244'}}
}
template<typename T, typename U>
@@ -570,10 +570,10 @@ namespace dr244 { // dr244: 11
B_ptr->~B_alias();
B_ptr->B_alias::~B();
B_ptr->B_alias::~B_alias();
- B_ptr->dr244::~B();
- // expected-error at -1 {{'dr244' does not refer to a type name in pseudo-destructor expression; expected the name of type 'T'}}
- B_ptr->dr244::~B_alias();
- // expected-error at -1 {{'dr244' does not refer to a type name in pseudo-destructor expression; expected the name of type 'T'}}
+ B_ptr->cwg244::~B();
+ // expected-error at -1 {{'cwg244' does not refer to a type name in pseudo-destructor expression; expected the name of type 'T'}}
+ B_ptr->cwg244::~B_alias();
+ // expected-error at -1 {{'cwg244' does not refer to a type name in pseudo-destructor expression; expected the name of type 'T'}}
}
template void f<B, D>(B*, D);
@@ -582,7 +582,7 @@ namespace dr244 { // dr244: 11
typedef E<int> F;
}
void g(N::F f) {
- typedef N::F G; // #dr244-G
+ typedef N::F G; // #cwg244-G
f.~G();
f.G::~E();
// expected-error at -1 {{ISO C++ requires the name after '::~' to be found in the same scope as the name before '::~'}}
@@ -601,7 +601,7 @@ namespace dr244 { // dr244: 11
// Rejecting this seems correct, but most compilers accept, so we do also.
f.N::F::~G();
// expected-error at -1 {{qualified destructor name only found in lexical scope; omit the qualifier to find this type name by unqualified lookup}}
- // expected-note@#dr244-G {{type 'G' (aka 'E<int>') found by destructor name lookup}}
+ // expected-note@#cwg244-G {{type 'G' (aka 'E<int>') found by destructor name lookup}}
}
// Bizarrely, compilers perform lookup in the scope for qualified destructor
@@ -613,46 +613,46 @@ namespace dr244 { // dr244: 11
}
template <typename U> void f(typename N::S<U>::Inner *p) {
typedef typename N::S<U>::Inner T;
- p->::dr244::QualifiedLookupInScope::N::S<U>::Inner::~T();
- // expected-error at -1 {{no type named 'T' in 'dr244::QualifiedLookupInScope::N::S<int>'}}
- // expected-note@#dr244-f {{in instantiation of function template specialization 'dr244::QualifiedLookupInScope::f<int>' requested here}}
+ p->::cwg244::QualifiedLookupInScope::N::S<U>::Inner::~T();
+ // expected-error at -1 {{no type named 'T' in 'cwg244::QualifiedLookupInScope::N::S<int>'}}
+ // expected-note@#cwg244-f {{in instantiation of function template specialization 'cwg244::QualifiedLookupInScope::f<int>' requested here}}
}
- template void f<int>(N::S<int>::Inner *); // #dr244-f
+ template void f<int>(N::S<int>::Inner *); // #cwg244-f
template <typename U> void g(U *p) {
typedef U T;
p->T::~T();
p->U::~T();
- p->::dr244::QualifiedLookupInScope::N::S<int>::Inner::~T();
+ p->::cwg244::QualifiedLookupInScope::N::S<int>::Inner::~T();
// expected-error at -1 {{'T' does not refer to a type name in pseudo-destructor expression; expected the name of type 'U'}}
}
template void g(N::S<int>::Inner *);
}
}
-namespace dr245 { // dr245: yes
+namespace cwg245 { // cwg245: yes
struct S {
- enum E {}; // #dr245-E
+ enum E {}; // #cwg245-E
class E *p;
// expected-error at -1 {{use of 'E' with tag type that does not match previous declaration}}
- // expected-note@#dr245-E {{previous use is here}}
+ // expected-note@#cwg245-E {{previous use is here}}
};
}
-namespace dr246 { // dr246: 3.2
+namespace cwg246 { // cwg246: 3.2
struct S {
- S() try { // #dr246-try
+ S() try { // #cwg246-try
throw 0;
X: ;
} catch (int) {
goto X;
// expected-error at -1 {{cannot jump from this goto statement to its label}}
- // expected-note@#dr246-try {{jump bypasses initialization of try block}}
+ // expected-note@#cwg246-try {{jump bypasses initialization of try block}}
}
};
}
-namespace dr247 { // dr247: yes
+namespace cwg247 { // cwg247: yes
struct A {};
struct B : A {
void f();
@@ -678,16 +678,16 @@ namespace dr247 { // dr247: yes
void (F::*i)() = &F::f;
}
-namespace dr248 { // dr248: sup P1949
+namespace cwg248 { // cwg248: sup P1949
int \u040d\u040e = 0;
}
-namespace dr249 { // dr249: yes
+namespace cwg249 { // cwg249: yes
template<typename T> struct X { void f(); };
template<typename T> void X<T>::f() {}
}
-namespace dr250 { // dr250: yes
+namespace cwg250 { // cwg250: yes
typedef void (*FPtr)(double x[]);
template<int I> void f(double x[]);
@@ -698,49 +698,49 @@ namespace dr250 { // dr250: yes
FPtr gp = &g<>;
}
-namespace dr252 { // dr252: 3.1
+namespace cwg252 { // cwg252: 3.1
struct A {
- void operator delete(void*); // #dr252-A
+ void operator delete(void*); // #cwg252-A
};
struct B {
- void operator delete(void*); // #dr252-B
+ void operator delete(void*); // #cwg252-B
};
struct C : A, B {
virtual ~C();
};
C::~C() {}
// expected-error at -1 {{member 'operator delete' found in multiple base classes of
diff erent types}}
- // expected-note@#dr252-A {{member found by ambiguous name lookup}}
- // expected-note@#dr252-B {{member found by ambiguous name lookup}}
+ // expected-note@#cwg252-A {{member found by ambiguous name lookup}}
+ // expected-note@#cwg252-B {{member found by ambiguous name lookup}}
struct D {
- void operator delete(void*, int); // #dr252-D
+ void operator delete(void*, int); // #cwg252-D
virtual ~D();
};
D::~D() {}
// expected-error at -1 {{no suitable member 'operator delete' in 'D'}}
- // expected-note@#dr252-D {{member 'operator delete' declared here}}
+ // expected-note@#cwg252-D {{member 'operator delete' declared here}}
struct E {
void operator delete(void*, int);
- void operator delete(void*) = delete; // #dr252-E
+ void operator delete(void*) = delete; // #cwg252-E
// cxx98-error at -1 {{deleted function definitions are a C++11 extension}}
virtual ~E();
};
E::~E() {}
// expected-error at -1 {{attempt to use a deleted function}}
- // expected-note@#dr252-E {{'operator delete' has been explicitly marked deleted here}}
+ // expected-note@#cwg252-E {{'operator delete' has been explicitly marked deleted here}}
struct F {
// If both functions are available, the first one is a placement delete.
void operator delete(void*, size_t);
- void operator delete(void*) = delete; // #dr252-F
+ void operator delete(void*) = delete; // #cwg252-F
// cxx98-error at -1 {{deleted function definitions are a C++11 extension}}
virtual ~F();
};
F::~F() {}
// expected-error at -1 {{attempt to use a deleted function}}
- // expected-note@#dr252-F {{'operator delete' has been explicitly marked deleted here}}
+ // expected-note@#cwg252-F {{'operator delete' has been explicitly marked deleted here}}
struct G {
void operator delete(void*, size_t);
@@ -749,33 +749,33 @@ namespace dr252 { // dr252: 3.1
G::~G() {}
}
-namespace dr254 { // dr254: 2.9
+namespace cwg254 { // cwg254: 2.9
template<typename T> struct A {
typedef typename T::type type; // ok even if this is a typedef-name, because
// it's not an elaborated-type-specifier
typedef struct T::type foo;
// expected-error at -1 {{typedef 'type' cannot be referenced with a struct specifier}}
- // expected-note@#dr254-instantiation {{in instantiation of template class 'dr254::A<dr254::C>' requested here}}
- // expected-note@#dr254-C {{declared here}}
+ // expected-note@#cwg254-instantiation {{in instantiation of template class 'cwg254::A<cwg254::C>' requested here}}
+ // expected-note@#cwg254-C {{declared here}}
};
struct B { struct type {}; };
- struct C { typedef struct {} type; }; // #dr254-C
+ struct C { typedef struct {} type; }; // #cwg254-C
A<B>::type n;
- A<C>::type n; // #dr254-instantiation
+ A<C>::type n; // #cwg254-instantiation
}
-namespace dr255 { // dr255: yes
+namespace cwg255 { // cwg255: yes
struct S {
void operator delete(void *){};
void operator delete(void *, int){};
};
void f(S *p) { delete p; }
-} // namespace dr255
+} // namespace cwg255
-// dr256: dup 624
+// cwg256: dup 624
-namespace dr257 { // dr257: 3.4
- struct A { A(int); }; // #dr257-A
+namespace cwg257 { // cwg257: 3.4
+ struct A { A(int); }; // #cwg257-A
struct B : virtual A {
B() {}
virtual void f() = 0;
@@ -785,13 +785,13 @@ namespace dr257 { // dr257: 3.4
};
struct D : B {
D() {}
- // expected-error at -1 {{constructor for 'dr257::D' must explicitly initialize the base class 'A' which does not have a default constructor}}
- // expected-note@#dr257-A {{'dr257::A' declared here}}
+ // expected-error at -1 {{constructor for 'cwg257::D' must explicitly initialize the base class 'A' which does not have a default constructor}}
+ // expected-note@#cwg257-A {{'cwg257::A' declared here}}
void f();
};
}
-namespace dr258 { // dr258: 2.8
+namespace cwg258 { // cwg258: 2.8
struct A {
void f(const int);
template<typename> void g(int);
@@ -802,13 +802,13 @@ namespace dr258 { // dr258: 2.8
using A::g;
using A::h;
int &f(int);
- template<int> int &g(int); // #dr258-B-g
+ template<int> int &g(int); // #cwg258-B-g
int &h();
} b;
int &w = b.f(0);
int &x = b.g<int>(0);
// expected-error at -1 {{no matching member function for call to 'g'}}
- // expected-note@#dr258-B-g {{candidate template ignored: invalid explicitly-specified argument for 1st template parameter}}
+ // expected-note@#cwg258-B-g {{candidate template ignored: invalid explicitly-specified argument for 1st template parameter}}
int &y = b.h();
float &z = const_cast<const B&>(b).h();
@@ -820,53 +820,53 @@ namespace dr258 { // dr258: 2.8
} d;
struct E {
- virtual void f() = 0; // #dr258-E-f
+ virtual void f() = 0; // #cwg258-E-f
};
struct F : E {
void f() const {}
} f;
// expected-error at -1 {{variable type 'struct F' is an abstract class}}
- // expected-note@#dr258-E-f {{unimplemented pure virtual method 'f' in 'F'}}
+ // expected-note@#cwg258-E-f {{unimplemented pure virtual method 'f' in 'F'}}
}
-namespace dr259 { // dr259: 4
+namespace cwg259 { // cwg259: 4
template<typename T> struct A {};
- template struct A<int>; // #dr259-A-int
+ template struct A<int>; // #cwg259-A-int
template struct A<int>;
// expected-error at -1 {{duplicate explicit instantiation of 'A<int>'}}
- // expected-note@#dr259-A-int {{previous explicit instantiation is here}}
+ // expected-note@#cwg259-A-int {{previous explicit instantiation is here}}
- template<> struct A<float>; // #dr259-A-float
+ template<> struct A<float>; // #cwg259-A-float
template struct A<float>;
// expected-warning at -1 {{explicit instantiation of 'A<float>' that occurs after an explicit specialization has no effect}}
- // expected-note@#dr259-A-float {{previous template specialization is here}}
+ // expected-note@#cwg259-A-float {{previous template specialization is here}}
- template struct A<char>; // #dr259-A-char
+ template struct A<char>; // #cwg259-A-char
template<> struct A<char>;
- // expected-error at -1 {{explicit specialization of 'dr259::A<char>' after instantiation}}
- // expected-note@#dr259-A-char {{explicit instantiation first required here}}
+ // expected-error at -1 {{explicit specialization of 'cwg259::A<char>' after instantiation}}
+ // expected-note@#cwg259-A-char {{explicit instantiation first required here}}
template<> struct A<double>;
template<> struct A<double>;
- template<> struct A<double> {}; // #dr259-A-double
+ template<> struct A<double> {}; // #cwg259-A-double
template<> struct A<double> {};
// expected-error at -1 {{redefinition of 'A<double>'}}
- // expected-note@#dr259-A-double {{previous definition is here}}
+ // expected-note@#cwg259-A-double {{previous definition is here}}
- template<typename T> struct B; // #dr259-B
+ template<typename T> struct B; // #cwg259-B
template struct B<int>;
- // expected-error at -1 {{explicit instantiation of undefined template 'dr259::B<int>'}}
- // expected-note@#dr259-B {{template is declared here}}
+ // expected-error at -1 {{explicit instantiation of undefined template 'cwg259::B<int>'}}
+ // expected-note@#cwg259-B {{template is declared here}}
- template<> struct B<float>; // #dr259-B-float
+ template<> struct B<float>; // #cwg259-B-float
template struct B<float>;
// expected-warning at -1 {{explicit instantiation of 'B<float>' that occurs after an explicit specialization has no effect}}
- // expected-note@#dr259-B-float {{previous template specialization is here}}
+ // expected-note@#cwg259-B-float {{previous template specialization is here}}
}
-// FIXME: When dr260 is resolved, also add tests for DR507.
+// FIXME: When cwg260 is resolved, also add tests for CWG507.
-namespace dr261 { // dr261: no
+namespace cwg261 { // cwg261: no
#pragma clang diagnostic push
#pragma clang diagnostic warning "-Wused-but-marked-unused"
@@ -901,14 +901,14 @@ namespace dr261 { // dr261: no
#pragma clang diagnostic pop
}
-namespace dr262 { // dr262: yes
+namespace cwg262 { // cwg262: yes
int f(int = 0, ...);
int k = f();
int l = f(0);
int m = f(0, 0);
}
-namespace dr263 { // dr263: 3.3
+namespace cwg263 { // cwg263: 3.3
struct X {};
struct Y {
#if __cplusplus < 201103L
@@ -928,12 +928,12 @@ namespace dr263 { // dr263: 3.3
};
}
-// dr265: dup 353
-// dr266: na
-// dr269: na
-// dr270: na
+// cwg265: dup 353
+// cwg266: na
+// cwg269: na
+// cwg270: na
-namespace dr272 { // dr272: yes
+namespace cwg272 { // cwg272: yes
struct X {
void f() {
this->~X();
@@ -946,7 +946,7 @@ namespace dr272 { // dr272: yes
#include <stdarg.h>
#include <stddef.h>
-namespace dr273 { // dr273: yes
+namespace cwg273 { // cwg273: yes
struct A {
int n;
};
@@ -959,12 +959,12 @@ namespace dr273 { // dr273: yes
}
}
-// dr274: na
+// cwg274: na
-namespace dr275 { // dr275: no
+namespace cwg275 { // cwg275: no
namespace N {
- template <class T> void f(T) {} // #dr275-N-f
- template <class T> void g(T) {} // #dr275-N-g
+ template <class T> void f(T) {} // #cwg275-N-f
+ template <class T> void g(T) {} // #cwg275-N-g
template <> void f(int);
template <> void f(char);
template <> void f(double);
@@ -980,19 +980,19 @@ namespace dr275 { // dr275: no
template <> void g(char) {}
// FIXME: this should be rejected in c++98 too
template void f(long);
- // since-cxx11-error at -1 {{explicit instantiation of 'dr275::N::f' must occur in namespace 'N'}}
- // since-cxx11-note@#dr275-N-f {{explicit instantiation refers here}}
+ // since-cxx11-error at -1 {{explicit instantiation of 'cwg275::N::f' must occur in namespace 'N'}}
+ // since-cxx11-note@#cwg275-N-f {{explicit instantiation refers here}}
// FIXME: this should be rejected in c++98 too
template void N::f(unsigned long);
// since-cxx11-error at -1 {{explicit instantiation of 'f' not in a namespace enclosing 'N'}}
- // since-cxx11-note@#dr275-N-f {{explicit instantiation refers here}}
+ // since-cxx11-note@#cwg275-N-f {{explicit instantiation refers here}}
template void h(long);
// expected-error at -1 {{explicit instantiation of 'h' does not refer to a function template, variable template, member function, member class, or static data member}}
template <> void f(double) {}
// expected-error at -1 {{no function template matches function template specialization 'f'}}
}
- template <class T> void g(T) {} // #dr275-g
+ template <class T> void g(T) {} // #cwg275-g
template <> void N::f(char) {}
template <> void f(int) {}
@@ -1000,87 +1000,87 @@ namespace dr275 { // dr275: no
// FIXME: this should be rejected in c++98 too
template void f(short);
- // since-cxx11-error at -1 {{explicit instantiation of 'dr275::N::f' must occur in namespace 'N'}}
- // since-cxx11-note@#dr275-N-f {{explicit instantiation refers here}}
+ // since-cxx11-error at -1 {{explicit instantiation of 'cwg275::N::f' must occur in namespace 'N'}}
+ // since-cxx11-note@#cwg275-N-f {{explicit instantiation refers here}}
template void N::f(unsigned short);
// FIXME: this should probably be valid. the wording from the issue
// doesn't clarify this, but it follows from the usual rules.
template void g(int);
// expected-error at -1 {{partial ordering for explicit instantiation of 'g' is ambiguous}}
- // expected-note@#dr275-g {{explicit instantiation candidate function 'dr275::g<int>' template here [with T = int]}}
- // expected-note@#dr275-N-g {{explicit instantiation candidate function 'dr275::N::g<int>' template here [with T = int]}}
+ // expected-note@#cwg275-g {{explicit instantiation candidate function 'cwg275::g<int>' template here [with T = int]}}
+ // expected-note@#cwg275-N-g {{explicit instantiation candidate function 'cwg275::N::g<int>' template here [with T = int]}}
// FIXME: likewise, this should also be valid.
- template<typename T> void f(T) {} // #dr275-f
+ template<typename T> void f(T) {} // #cwg275-f
template void f(short);
// expected-error at -1 {{partial ordering for explicit instantiation of 'f' is ambiguous}}
- // expected-note@#dr275-f {{explicit instantiation candidate function 'dr275::f<short>' template here [with T = short]}}
- // expected-note@#dr275-N-f {{explicit instantiation candidate function 'dr275::N::f<short>' template here [with T = short]}}
+ // expected-note@#cwg275-f {{explicit instantiation candidate function 'cwg275::f<short>' template here [with T = short]}}
+ // expected-note@#cwg275-N-f {{explicit instantiation candidate function 'cwg275::N::f<short>' template here [with T = short]}}
}
-// dr276: na
+// cwg276: na
-namespace dr277 { // dr277: 3.1
+namespace cwg277 { // cwg277: 3.1
typedef int *intp;
int *p = intp();
int a[fold(intp() ? -1 : 1)];
}
-namespace dr280 { // dr280: 2.9
+namespace cwg280 { // cwg280: 2.9
typedef void f0();
typedef void f1(int);
typedef void f2(int, int);
typedef void f3(int, int, int);
struct A {
- operator f1*(); // #dr280-A-f1
+ operator f1*(); // #cwg280-A-f1
operator f2*();
};
struct B {
- operator f0*(); // #dr280-B-f0
+ operator f0*(); // #cwg280-B-f0
private:
- operator f3*(); // #dr280-B-f3
+ operator f3*(); // #cwg280-B-f3
};
struct C {
- operator f0*(); // #dr280-C-f0
- operator f1*(); // #dr280-C-f1
- operator f2*(); // #dr280-C-f2
- operator f3*(); // #dr280-C-f3
+ operator f0*(); // #cwg280-C-f0
+ operator f1*(); // #cwg280-C-f1
+ operator f2*(); // #cwg280-C-f2
+ operator f3*(); // #cwg280-C-f3
};
- struct D : private A, B { // #dr280-D
- operator f2*(); // #dr280-D-f2
+ struct D : private A, B { // #cwg280-D
+ operator f2*(); // #cwg280-D-f2
} d;
struct E : C, D {} e;
void g() {
d(); // ok, public
d(0);
- // expected-error at -1 {{'operator void (*)(int)' is a private member of 'dr280::A'}}
- // expected-note@#dr280-D {{constrained by private inheritance here}}
- // expected-note@#dr280-A-f1 {{member is declared here}}
+ // expected-error at -1 {{'operator void (*)(int)' is a private member of 'cwg280::A'}}
+ // expected-note@#cwg280-D {{constrained by private inheritance here}}
+ // expected-note@#cwg280-A-f1 {{member is declared here}}
d(0, 0); // ok, suppressed by member in D
d(0, 0, 0);
- // expected-error at -1 {{'operator void (*)(int, int, int)' is a private member of 'dr280::B'}}
- // expected-note@#dr280-B-f3 {{declared private here}}
+ // expected-error at -1 {{'operator void (*)(int, int, int)' is a private member of 'cwg280::B'}}
+ // expected-note@#cwg280-B-f3 {{declared private here}}
e();
// expected-error at -1 {{call to object of type 'struct E' is ambiguous}}
- // expected-note@#dr280-B-f0 {{conversion candidate of type 'void (*)()'}}
- // expected-note@#dr280-C-f0 {{conversion candidate of type 'void (*)()'}}
+ // expected-note@#cwg280-B-f0 {{conversion candidate of type 'void (*)()'}}
+ // expected-note@#cwg280-C-f0 {{conversion candidate of type 'void (*)()'}}
e(0);
// expected-error at -1 {{call to object of type 'struct E' is ambiguous}}
- // expected-note@#dr280-A-f1 {{conversion candidate of type 'void (*)(int)'}}
- // expected-note@#dr280-C-f1 {{conversion candidate of type 'void (*)(int)'}}
+ // expected-note@#cwg280-A-f1 {{conversion candidate of type 'void (*)(int)'}}
+ // expected-note@#cwg280-C-f1 {{conversion candidate of type 'void (*)(int)'}}
e(0, 0);
// expected-error at -1 {{call to object of type 'struct E' is ambiguous}}
- // expected-note@#dr280-C-f2 {{conversion candidate of type 'void (*)(int, int)'}}
- // expected-note@#dr280-D-f2 {{conversion candidate of type 'void (*)(int, int)'}}
+ // expected-note@#cwg280-C-f2 {{conversion candidate of type 'void (*)(int, int)'}}
+ // expected-note@#cwg280-D-f2 {{conversion candidate of type 'void (*)(int, int)'}}
e(0, 0, 0);
// expected-error at -1 {{call to object of type 'struct E' is ambiguous}}
- // expected-note@#dr280-B-f3 {{conversion candidate of type 'void (*)(int, int, int)'}}
- // expected-note@#dr280-C-f3 {{conversion candidate of type 'void (*)(int, int, int)'}}
+ // expected-note@#cwg280-B-f3 {{conversion candidate of type 'void (*)(int, int, int)'}}
+ // expected-note@#cwg280-C-f3 {{conversion candidate of type 'void (*)(int, int, int)'}}
}
}
-namespace dr281 { // dr281: no
+namespace cwg281 { // cwg281: no
void a();
inline void b();
@@ -1097,19 +1097,19 @@ namespace dr281 { // dr281: no
};
}
-namespace dr283 { // dr283: yes
- template<typename T> // #dr283-template
+namespace cwg283 { // cwg283: yes
+ template<typename T> // #cwg283-template
struct S {
friend class T;
// expected-error at -1 {{declaration of 'T' shadows template parameter}}
- // expected-note@#dr283-template {{template parameter is declared here}}
+ // expected-note@#cwg283-template {{template parameter is declared here}}
class T;
// expected-error at -1 {{declaration of 'T' shadows template parameter}}
- // expected-note@#dr283-template {{template parameter is declared here}}
+ // expected-note@#cwg283-template {{template parameter is declared here}}
};
}
-namespace dr284 { // dr284: no
+namespace cwg284 { // cwg284: no
namespace A {
struct X;
enum Y {};
@@ -1122,11 +1122,11 @@ namespace dr284 { // dr284: no
using A::Z;
}
struct B::V {};
- // expected-error at -1 {{no struct named 'V' in namespace 'dr284::B'}}
+ // expected-error at -1 {{no struct named 'V' in namespace 'cwg284::B'}}
struct B::W {};
struct B::X {}; // FIXME: ill-formed
- enum B::Y e; // ok per dr417
- class B::Z z; // ok per dr417
+ enum B::Y e; // ok per cwg417
+ class B::Z z; // ok per cwg417
struct C {
struct X;
@@ -1140,26 +1140,26 @@ namespace dr284 { // dr284: no
using C::Z;
};
struct D::V {};
- // expected-error at -1 {{no struct named 'V' in 'dr284::D'}}
+ // expected-error at -1 {{no struct named 'V' in 'cwg284::D'}}
struct D::W {};
struct D::X {}; // FIXME: ill-formed
- enum D::Y e2; // ok per dr417
- class D::Z z2; // ok per dr417
+ enum D::Y e2; // ok per cwg417
+ class D::Z z2; // ok per cwg417
}
-namespace dr285 { // dr285: yes
- template<typename T> void f(T, int); // #dr285-f-T-int
- template<typename T> void f(int, T); // #dr285-f-int-T
+namespace cwg285 { // cwg285: yes
+ template<typename T> void f(T, int); // #cwg285-f-T-int
+ template<typename T> void f(int, T); // #cwg285-f-int-T
template<> void f<int>(int, int) {}
// expected-error at -1 {{function template specialization 'f' ambiguously refers to more than one function template; explicitly specify additional template arguments to identify a particular function template}}
- // expected-note@#dr285-f-int-T {{function template 'dr285::f<int>' matches specialization [with T = int]}}
- // expected-note@#dr285-f-T-int {{function template 'dr285::f<int>' matches specialization [with T = int]}}
+ // expected-note@#cwg285-f-int-T {{function template 'cwg285::f<int>' matches specialization [with T = int]}}
+ // expected-note@#cwg285-f-T-int {{function template 'cwg285::f<int>' matches specialization [with T = int]}}
}
-namespace dr286 { // dr286: 2.8
+namespace cwg286 { // cwg286: 2.8
template<class T> struct A {
class C {
- template<class T2> struct B {}; // #dr286-B
+ template<class T2> struct B {}; // #cwg286-B
};
};
@@ -1168,29 +1168,29 @@ namespace dr286 { // dr286: 2.8
struct A<T>::C::B<T2*> { };
A<short>::C::B<int*> absip;
- // expected-error at -1 {{'B' is a private member of 'dr286::A<short>::C'}}
- // expected-note@#dr286-B {{implicitly declared private here}}
+ // expected-error at -1 {{'B' is a private member of 'cwg286::A<short>::C'}}
+ // expected-note@#cwg286-B {{implicitly declared private here}}
}
-// dr288: na
+// cwg288: na
-namespace dr289 { // dr289: yes
- struct A; // #dr289-A
+namespace cwg289 { // cwg289: yes
+ struct A; // #cwg289-A
struct B : A {};
// expected-error at -1 {{base class has incomplete type}}
- // expected-note@#dr289-A {{forward declaration of 'dr289::A'}}
+ // expected-note@#cwg289-A {{forward declaration of 'cwg289::A'}}
template<typename T> struct C { typename T::error error; };
// expected-error at -1 {{type 'int' cannot be used prior to '::' because it has no members}}
- // expected-note@#dr289-C-int {{in instantiation of template class 'dr289::C<int>' requested here}}
- struct D : C<int> {}; // #dr289-C-int
+ // expected-note@#cwg289-C-int {{in instantiation of template class 'cwg289::C<int>' requested here}}
+ struct D : C<int> {}; // #cwg289-C-int
}
-// dr290: na
-// dr291: dup 391
-// dr292 is in dr292.cpp
+// cwg290: na
+// cwg291: dup 391
+// cwg292 is in cwg292.cpp
-namespace dr294 { // dr294: no
+namespace cwg294 { // cwg294: no
void f() throw(int);
// since-cxx17-error at -1 {{ISO C++17 does not allow dynamic exception specifications}}
// since-cxx17-note at -2 {{use 'noexcept(false)' instead}}
@@ -1218,7 +1218,7 @@ namespace dr294 { // dr294: no
}
}
-namespace dr295 { // dr295: 3.7
+namespace cwg295 { // cwg295: 3.7
typedef int f();
const f g;
// expected-warning at -1 {{'const' qualifier on function type 'f' (aka 'int ()') has no effect}}
@@ -1237,21 +1237,21 @@ namespace dr295 { // dr295: 3.7
// expected-warning at -1 {{'volatile' qualifier on function type 'U' (aka 'int ()') has no effect}}
}
-namespace dr296 { // dr296: yes
+namespace cwg296 { // cwg296: yes
struct A {
static operator int() { return 0; }
// expected-error at -1 {{conversion function must be a non-static member function}}
};
}
-namespace dr298 { // dr298: 3.1
+namespace cwg298 { // cwg298: 3.1
struct A {
typedef int type;
A();
~A();
};
- typedef A B; // #dr298-B
- typedef const A C; // #dr298-C
+ typedef A B; // #cwg298-B
+ typedef const A C; // #cwg298-C
A::type i1;
B::type i2;
@@ -1260,21 +1260,21 @@ namespace dr298 { // dr298: 3.1
struct A a;
struct B b;
// expected-error at -1 {{typedef 'B' cannot be referenced with a struct specifier}}
- // expected-note@#dr298-B {{declared here}}
+ // expected-note@#cwg298-B {{declared here}}
struct C c;
// expected-error at -1 {{typedef 'C' cannot be referenced with a struct specifier}}
- // expected-note@#dr298-C {{declared here}}
+ // expected-note@#cwg298-C {{declared here}}
B::B() {}
// expected-error at -1 {{a type specifier is required for all declarations}}
B::A() {} // ok
C::~C() {}
- // expected-error at -1 {{destructor cannot be declared using a typedef 'C' (aka 'const dr298::A') of the class name}}
+ // expected-error at -1 {{destructor cannot be declared using a typedef 'C' (aka 'const cwg298::A') of the class name}}
- typedef struct D E; // #dr298-E
+ typedef struct D E; // #cwg298-E
struct E {};
// expected-error at -1 {{definition of type 'E' conflicts with typedef of the same name}}
- // expected-note@#dr298-E {{'E' declared here}}
+ // expected-note@#cwg298-E {{'E' declared here}}
struct F {
~F();
@@ -1283,22 +1283,22 @@ namespace dr298 { // dr298: 3.1
G::~F() {} // ok
}
-namespace dr299 { // dr299: 2.8 c++11
+namespace cwg299 { // cwg299: 2.8 c++11
struct S {
operator int();
};
struct T {
- operator int(); // #dr299-int
- operator unsigned short(); // #dr299-ushort
+ operator int(); // #cwg299-int
+ operator unsigned short(); // #cwg299-ushort
};
// FIXME: should this apply to c++98 mode?
int *p = new int[S()];
// cxx98-error at -1 {{implicit conversion from array size expression of type 'S' to integral type 'int' is a C++11 extension}}
- int *q = new int[T()]; // #dr299-q
- // cxx98-11-error@#dr299-q {{ambiguous conversion of array size expression of type 'T' to an integral or enumeration type}}
- // cxx98-11-note@#dr299-int {{conversion to integral type 'int' declared here}}
- // cxx98-11-note@#dr299-ushort {{conversion to integral type 'unsigned short' declared here}}
- // since-cxx14-error-re@#dr299-q {{{{conversion from 'T' to 'unsigned (long long|long|int)' is ambiguous}}}}
- // since-cxx14-note@#dr299-int {{candidate function}}
- // since-cxx14-note@#dr299-ushort {{candidate function}}
+ int *q = new int[T()]; // #cwg299-q
+ // cxx98-11-error@#cwg299-q {{ambiguous conversion of array size expression of type 'T' to an integral or enumeration type}}
+ // cxx98-11-note@#cwg299-int {{conversion to integral type 'int' declared here}}
+ // cxx98-11-note@#cwg299-ushort {{conversion to integral type 'unsigned short' declared here}}
+ // since-cxx14-error-re@#cwg299-q {{{{conversion from 'T' to 'unsigned (long long|long|int)' is ambiguous}}}}
+ // since-cxx14-note@#cwg299-int {{candidate function}}
+ // since-cxx14-note@#cwg299-ushort {{candidate function}}
}
diff --git a/clang/test/CXX/drs/dr3xx.cpp b/clang/test/CXX/drs/dr3xx.cpp
index d5cfebccf8134b..6d1c6958ac8eb6 100644
--- a/clang/test/CXX/drs/dr3xx.cpp
+++ b/clang/test/CXX/drs/dr3xx.cpp
@@ -5,14 +5,14 @@
// RUN: %clang_cc1 -std=c++11 -verify=expected,cxx98-14,cxx98-17,cxx98-20,cxx11-14,since-cxx11 -triple %itanium_abi_triple %s -fexceptions -fcxx-exceptions -pedantic-errors
// RUN: %clang_cc1 -std=c++98 -verify=expected,cxx98-14,cxx98-17,cxx98-20,cxx98 -triple %itanium_abi_triple %s -fexceptions -fcxx-exceptions -pedantic-errors
-namespace dr300 { // dr300: yes
+namespace cwg300 { // cwg300: yes
template<typename R, typename A> void f(R (&)(A)) {}
int g(int);
void h() { f(g); }
}
-namespace dr301 { // dr301: 3.5
- // see also dr38
+namespace cwg301 { // cwg301: 3.5
+ // see also cwg38
struct S;
template<typename T> void operator+(T, T);
void operator-(S, S);
@@ -66,55 +66,55 @@ namespace dr301 { // dr301: 3.5
// expected-error at -3 {{declaration does not declare anything}}
}
-namespace dr302 { // dr302: 3.0
+namespace cwg302 { // cwg302: 3.0
struct A { A(); ~A(); };
#if __cplusplus < 201103L
struct B {
- // expected-error at -1 {{implicit default constructor for 'dr302::B' must explicitly initialize the const member 'n'}}
- // expected-note@#dr302-b {{in implicit default constructor for 'dr302::B' first required here}}
- // expected-note@#dr302-B-n {{declared here}}
- const int n; // #dr302-B-n
+ // expected-error at -1 {{implicit default constructor for 'cwg302::B' must explicitly initialize the const member 'n'}}
+ // expected-note@#cwg302-b {{in implicit default constructor for 'cwg302::B' first required here}}
+ // expected-note@#cwg302-B-n {{declared here}}
+ const int n; // #cwg302-B-n
A a;
- } b = B(); // #dr302-b
+ } b = B(); // #cwg302-b
// Trivial default constructor C::C() is not called here.
struct C {
const int n;
} c = C();
#else
struct B {
- const int n; // #dr302-B-n
+ const int n; // #cwg302-B-n
A a;
} b = B();
// expected-error at -1 {{call to implicitly-deleted default constructor of 'B'}}
- // expected-note@#dr302-B-n {{default constructor of 'B' is implicitly deleted because field 'n' of const-qualified type 'const int' would not be initialized}}
+ // expected-note@#cwg302-B-n {{default constructor of 'B' is implicitly deleted because field 'n' of const-qualified type 'const int' would not be initialized}}
// C::C() is called here, because even though it's trivial, it's deleted.
struct C {
- const int n; // #dr302-C-n
+ const int n; // #cwg302-C-n
} c = C();
// expected-error at -1 {{call to implicitly-deleted default constructor of 'C'}}
- // expected-note@#dr302-C-n {{default constructor of 'C' is implicitly deleted because field 'n' of const-qualified type 'const int' would not be initialized}}
+ // expected-note@#cwg302-C-n {{default constructor of 'C' is implicitly deleted because field 'n' of const-qualified type 'const int' would not be initialized}}
struct D {
const int n = 0;
} d = D();
#endif
}
-// dr303: na
+// cwg303: na
-namespace dr304 { // dr304: 2.9
+namespace cwg304 { // cwg304: 2.9
typedef int &a;
int n = a();
// expected-error at -1 {{reference to type 'int' requires an initializer}}
- struct S { int &b; }; // #dr304-S
+ struct S { int &b; }; // #cwg304-S
// cxx98-error at -1 {{reference to type 'int' requires an initializer}}
- // cxx98-note@#dr304-m {{in value-initialization of type 'S' here}}
- int m = S().b; // #dr304-m
+ // cxx98-note@#cwg304-m {{in value-initialization of type 'S' here}}
+ int m = S().b; // #cwg304-m
// since-cxx11-error at -1 {{call to implicitly-deleted default constructor of 'S'}}
- // since-cxx11-note@#dr304-S {{default constructor of 'S' is implicitly deleted because field 'b' of reference type 'int &' would not be initialized}}
+ // since-cxx11-note@#cwg304-S {{default constructor of 'S' is implicitly deleted because field 'b' of reference type 'int &' would not be initialized}}
}
-namespace dr305 { // dr305: no
+namespace cwg305 { // cwg305: no
struct A {
typedef A C;
};
@@ -129,10 +129,10 @@ namespace dr305 { // dr305: no
b->~C();
}
void h(B *b) {
- struct B {}; // #dr305-h-B
+ struct B {}; // #cwg305-h-B
b->~B();
- // expected-error at -1 {{destructor type 'B' in object destruction expression does not match the type 'B' (aka 'dr305::A') of the object being destroyed}}
- // expected-note@#dr305-h-B {{type 'B' found by destructor name lookup}}
+ // expected-error at -1 {{destructor type 'B' in object destruction expression does not match the type 'B' (aka 'cwg305::A') of the object being destroyed}}
+ // expected-note@#cwg305-h-B {{type 'B' found by destructor name lookup}}
}
template<typename T> struct X {};
@@ -141,7 +141,7 @@ namespace dr305 { // dr305: no
x->~X<int>();
x->~X();
x->~X<char>();
- // expected-error at -1 {{no member named '~X' in 'dr305::X<int>'}}
+ // expected-error at -1 {{no member named '~X' in 'cwg305::X<int>'}}
}
#if __cplusplus >= 201103L
@@ -158,9 +158,9 @@ namespace dr305 { // dr305: no
};
void k(Z *z) {
z->~T1<int>();
- // expected-error at -1 {{no member named 'T1' in 'dr305::Z'}}
+ // expected-error at -1 {{no member named 'T1' in 'cwg305::Z'}}
z->~T2<int>();
- // expected-error at -1 {{no member named '~int' in 'dr305::Z'}}
+ // expected-error at -1 {{no member named '~int' in 'cwg305::Z'}}
z->~T2<Z>();
}
@@ -170,29 +170,29 @@ namespace dr305 { // dr305: no
}
template<typename A> using R = Q::R<int>;
void qr(Q::R<int> x) { x.~R<char>(); }
- // expected-error at -1 {{no member named '~R' in 'dr305::Q::R<int>'}}
+ // expected-error at -1 {{no member named '~R' in 'cwg305::Q::R<int>'}}
#endif
}
-namespace dr306 { // dr306: dup 39
+namespace cwg306 { // cwg306: dup 39
struct A { struct B {}; };
struct C { typedef A::B B; };
struct D : A, A::B, C {};
D::B b;
- struct X {}; // #dr306-X
- template<typename T> struct Y { typedef T X; }; // #dr306-typedef-X
+ struct X {}; // #cwg306-X
+ template<typename T> struct Y { typedef T X; }; // #cwg306-typedef-X
template<typename T> struct Z : X, Y<T> {};
Z<X>::X zx;
Z<const X>::X zcx;
// expected-error at -1 {{member 'X' found in multiple base classes of
diff erent types}}
- // expected-note@#dr306-X {{member type 'dr306::X' found}}
- // expected-note@#dr306-typedef-X {{member type 'const dr306::X' found}}
+ // expected-note@#cwg306-X {{member type 'cwg306::X' found}}
+ // expected-note@#cwg306-typedef-X {{member type 'const cwg306::X' found}}
}
-// dr307: na
+// cwg307: na
-namespace dr308 { // dr308: 3.7
+namespace cwg308 { // cwg308: 3.7
// This is mostly an ABI library issue.
struct A {};
struct B : A {};
@@ -210,19 +210,19 @@ namespace dr308 { // dr308: 3.7
// positive rate should be acceptably low.
try {
throw D();
- } catch (const A&) { // #dr308-catch-A
+ } catch (const A&) { // #cwg308-catch-A
// unreachable
} catch (const B&) {
// expected-warning at -1 {{exception of type 'const B &' will be caught by earlier handler}}
- // expected-note@#dr308-catch-A {{for type 'const A &'}}
+ // expected-note@#cwg308-catch-A {{for type 'const A &'}}
// get here instead
}
}
}
-// dr309: dup 485
+// cwg309: dup 485
-namespace dr311 { // dr311: 3.0
+namespace cwg311 { // cwg311: 3.0
namespace X { namespace Y {} }
namespace X::Y {}
// cxx98-14-error at -1 {{nested namespace definition is a C++17 extension; define each namespace separately}}
@@ -231,23 +231,23 @@ namespace dr311 { // dr311: 3.0
// cxx98-14-error at -1 {{nested namespace definition is a C++17 extension; define each namespace separately}}
}
// FIXME: The diagnostics here are not very good.
- namespace ::dr311::X {}
+ namespace ::cwg311::X {}
// expected-error at -1 {{expected identifier or '{'}}
// expected-warning at -2 {{extra qualification on member 'X'}}
// expected-error at -3 {{a type specifier is required for all declarations}}
// expected-error at -4 {{expected ';' after top level declarator}}
}
-// dr312: dup 616
+// cwg312: dup 616
-namespace dr313 { // dr313: dup 299 c++11
+namespace cwg313 { // cwg313: dup 299 c++11
struct A { operator int() const; };
// FIXME: should this be available in c++98 mode?
int *p = new int[A()];
// cxx98-error at -1 {{implicit conversion from array size expression of type 'A' to integral type 'int' is a C++11 extension}}
}
-namespace dr314 { // dr314: no
+namespace cwg314 { // cwg314: no
// NB: dup 1710
template <typename T> struct A {
template <typename U> struct B {};
@@ -260,16 +260,16 @@ template <typename T> struct C2 : public A<T>::B<T> {
C2() : A<T>::B<T>() {}
// expected-error at -1 {{use 'template' keyword to treat 'B' as a dependent template name}}
};
-} // namespace dr314
+} // namespace cwg314
-// dr315: na
-// dr316: sup 1004
+// cwg315: na
+// cwg316: sup 1004
-namespace dr317 { // dr317: 3.5
- void f() {} // #dr317-f
+namespace cwg317 { // cwg317: 3.5
+ void f() {} // #cwg317-f
inline void f();
// expected-error at -1 {{inline declaration of 'f' follows non-inline definition}}
- // expected-note@#dr317-f {{previous definition is here}}
+ // expected-note@#cwg317-f {{previous definition is here}}
int g();
int n = g();
@@ -277,19 +277,19 @@ namespace dr317 { // dr317: 3.5
int h();
int m = h();
- int h() { return 0; } // #dr317-h
+ int h() { return 0; } // #cwg317-h
inline int h();
// expected-error at -1 {{inline declaration of 'h' follows non-inline definition}}
- // expected-note@#dr317-h {{previous definition is here}}
+ // expected-note@#cwg317-h {{previous definition is here}}
}
-namespace dr318 { // dr318: sup 1310
+namespace cwg318 { // cwg318: sup 1310
struct A {};
struct A::A a;
}
-namespace dr319 { // dr319: no
- // FIXME: dup dr389
+namespace cwg319 { // cwg319: no
+ // FIXME: dup cwg389
// FIXME: We don't have a diagnostic for a name with linkage
// having a type without linkage.
typedef struct {
@@ -325,7 +325,7 @@ namespace dr319 { // dr319: no
}
}
-namespace dr320 { // dr320: yes
+namespace cwg320 { // cwg320: yes
#if __cplusplus >= 201103L
struct X {
constexpr X() {}
@@ -338,7 +338,7 @@ namespace dr320 { // dr320: yes
#endif
}
-namespace dr321 { // dr321: dup 557
+namespace cwg321 { // cwg321: dup 557
namespace N {
template<int> struct A {
template<int> struct B;
@@ -358,7 +358,7 @@ namespace dr321 { // dr321: dup 557
bool x = i == j;
}
-namespace dr322 { // dr322: 2.8
+namespace cwg322 { // cwg322: 2.8
struct A {
template<typename T> operator T&();
} a;
@@ -366,18 +366,18 @@ namespace dr322 { // dr322: 2.8
int &s = a;
}
-// dr323: no
+// cwg323: no
-namespace dr324 { // dr324: 3.6
- struct S { int n : 1; } s; // #dr324-n
+namespace cwg324 { // cwg324: 3.6
+ struct S { int n : 1; } s; // #cwg324-n
int &a = s.n;
// expected-error at -1 {{non-const reference cannot bind to bit-field 'n'}}
- // expected-note@#dr324-n {{bit-field is declared here}}
+ // expected-note@#cwg324-n {{bit-field is declared here}}
int *b = &s.n;
// expected-error at -1 {{address of bit-field requested}}
int &c = (s.n = 0);
// expected-error at -1 {{non-const reference cannot bind to bit-field 'n'}}
- // expected-note@#dr324-n {{bit-field is declared here}}
+ // expected-note@#cwg324-n {{bit-field is declared here}}
int *d = &(s.n = 0);
// expected-error at -1 {{address of bit-field requested}}
// FIXME: why don't we emit a note here, as for the rest of this type of diagnostic in this test?
@@ -387,19 +387,19 @@ namespace dr324 { // dr324: 3.6
// expected-error at -1 {{address of bit-field requested}}
int &g = (void(), s.n);
// expected-error at -1 {{non-const reference cannot bind to bit-field 'n'}}
- // expected-note@#dr324-n {{bit-field is declared here}}
+ // expected-note@#cwg324-n {{bit-field is declared here}}
int *h = &(void(), s.n);
// expected-error at -1 {{address of bit-field requested}}
int *i = &++s.n;
// expected-error at -1 {{address of bit-field requested}}
}
-namespace dr326 { // dr326: 3.1
+namespace cwg326 { // cwg326: 3.1
struct S {};
int test[__is_trivially_constructible(S, const S&) ? 1 : -1];
}
-namespace dr327 { // dr327: dup 538
+namespace cwg327 { // cwg327: dup 538
struct A;
class A {};
@@ -407,40 +407,40 @@ namespace dr327 { // dr327: dup 538
struct B {};
}
-namespace dr328 { // dr328: yes
- struct A; // #dr328-A
+namespace cwg328 { // cwg328: yes
+ struct A; // #cwg328-A
struct B { A a; };
// expected-error at -1 {{field has incomplete type 'A'}}
- // expected-note@#dr328-A {{forward declaration of 'dr328::A'}}
+ // expected-note@#cwg328-A {{forward declaration of 'cwg328::A'}}
template<typename> struct C { A a; };
// expected-error at -1 {{field has incomplete type 'A'}}
- // expected-note@#dr328-A {{forward declaration of 'dr328::A'}}
+ // expected-note@#cwg328-A {{forward declaration of 'cwg328::A'}}
A *p = new A[0];
// expected-error at -1 {{allocation of incomplete type 'A'}}
- // expected-note@#dr328-A {{forward declaration of 'dr328::A'}}
+ // expected-note@#cwg328-A {{forward declaration of 'cwg328::A'}}
}
-namespace dr329 { // dr329: 3.5
+namespace cwg329 { // cwg329: 3.5
struct B {};
template<typename T> struct A : B {
friend void f(A a) { g(a); }
friend void h(A a) { g(a); }
// expected-error at -1 {{use of undeclared identifier 'g'}}
- // expected-note@#dr329-h-call {{in instantiation of member function 'dr329::h' requested here}}
- friend void i(B b) {} // #dr329-i
+ // expected-note@#cwg329-h-call {{in instantiation of member function 'cwg329::h' requested here}}
+ friend void i(B b) {} // #cwg329-i
// expected-error at -1 {{redefinition of 'i'}}
- // expected-note@#dr329-b {{in instantiation of template class 'dr329::A<char>' requested here}}
- // expected-note@#dr329-i {{previous definition is here}}
+ // expected-note@#cwg329-b {{in instantiation of template class 'cwg329::A<char>' requested here}}
+ // expected-note@#cwg329-i {{previous definition is here}}
};
A<int> a;
- A<char> b; // #dr329-b
+ A<char> b; // #cwg329-b
void test() {
- h(a); // #dr329-h-call
+ h(a); // #cwg329-h-call
}
}
-namespace dr330 { // dr330: 7
+namespace cwg330 { // cwg330: 7
// Conversions between P and Q will be allowed by P0388.
typedef int *(*P)[3];
typedef const int *const (*Q)[3];
@@ -526,27 +526,27 @@ namespace dr330 { // dr330: 7
void f(A *a) {
(void) reinterpret_cast<B1*>(a);
(void) reinterpret_cast<B2*>(a);
- // expected-error at -1 {{ISO C++ does not allow reinterpret_cast from 'A *' (aka 'const volatile int (*)[1][2][3]') to 'B2 *' (aka 'int *const dr330::swift_17882::X::***') because it casts away qualifiers, even though the source and destination types are unrelated}}
+ // expected-error at -1 {{ISO C++ does not allow reinterpret_cast from 'A *' (aka 'const volatile int (*)[1][2][3]') to 'B2 *' (aka 'int *const cwg330::swift_17882::X::***') because it casts away qualifiers, even though the source and destination types are unrelated}}
(void) reinterpret_cast<B3*>(a);
- // expected-error at -1 {{ISO C++ does not allow reinterpret_cast from 'A *' (aka 'const volatile int (*)[1][2][3]') to 'B3 *' (aka 'int *dr330::swift_17882::X::*volatile **') because it casts away qualifiers, even though the source and destination types are unrelated}}
+ // expected-error at -1 {{ISO C++ does not allow reinterpret_cast from 'A *' (aka 'const volatile int (*)[1][2][3]') to 'B3 *' (aka 'int *cwg330::swift_17882::X::*volatile **') because it casts away qualifiers, even though the source and destination types are unrelated}}
(void) reinterpret_cast<B4*>(a);
}
}
}
-namespace dr331 { // dr331: 11
+namespace cwg331 { // cwg331: 11
struct A {
- A(volatile A&); // #dr331-A-ctor
+ A(volatile A&); // #cwg331-A-ctor
};
const A a;
// expected-error at -1 {{no matching constructor for initialization of 'const A'}}
- // expected-note@#dr331-A-ctor {{candidate constructor not viable: requires 1 argument, but 0 were provided}}
+ // expected-note@#cwg331-A-ctor {{candidate constructor not viable: requires 1 argument, but 0 were provided}}
const A b(a);
// expected-error at -1 {{no matching constructor for initialization of 'const A'}}
- // expected-note@#dr331-A-ctor {{candidate constructor not viable: 1st argument ('const A') would lose const qualifier}}
+ // expected-note@#cwg331-A-ctor {{candidate constructor not viable: 1st argument ('const A') would lose const qualifier}}
}
-namespace dr332 { // dr332: dup 577
+namespace cwg332 { // cwg332: dup 577
void f(volatile void);
// expected-error at -1 {{'void' as parameter must not have type qualifiers}}
// cxx20-23-warning at -2 {{volatile-qualified parameter type 'volatile void' is deprecated}}
@@ -557,14 +557,14 @@ namespace dr332 { // dr332: dup 577
// cxx20-23-warning at -2 {{volatile-qualified parameter type 'volatile void' is deprecated}}
}
-namespace dr333 { // dr333: yes
+namespace cwg333 { // cwg333: yes
int n = 0;
int f(int(n));
int g((int(n)));
int h = f(g);
}
-namespace dr334 { // dr334: yes
+namespace cwg334 { // cwg334: yes
template<typename T> void f() {
T x;
f((x, 123));
@@ -576,9 +576,9 @@ namespace dr334 { // dr334: yes
template void f<S>();
}
-// dr335: no
+// cwg335: no
-namespace dr336 { // dr336: yes
+namespace cwg336 { // cwg336: yes
namespace Pre {
template<class T1> class A {
template<class T2> class B {
@@ -588,7 +588,7 @@ namespace dr336 { // dr336: yes
};
template<> template<class X> class A<int>::B {};
template<> template<> template<class T> void A<int>::B<double>::mf1(T t) {}
- // expected-error at -1 {{out-of-line definition of 'mf1' does not match any declaration in 'dr336::Pre::A<int>::B<double>'}}
+ // expected-error at -1 {{out-of-line definition of 'mf1' does not match any declaration in 'cwg336::Pre::A<int>::B<double>'}}
template<class Y> template<> void A<Y>::B<double>::mf2() {}
// expected-error at -1 {{nested name specifier 'A<Y>::B<double>::' for declaration does not refer into a class, class template or class template partial specialization}}
}
@@ -609,7 +609,7 @@ namespace dr336 { // dr336: yes
}
}
-namespace dr337 { // dr337: yes
+namespace cwg337 { // cwg337: yes
template<typename T> void f(T (*)[1]);
template<typename T> int &f(...);
@@ -617,7 +617,7 @@ namespace dr337 { // dr337: yes
int &r = f<A>(0);
// FIXME: The language rules here are completely broken. We cannot determine
- // whether an incomplete type is abstract. See DR1640, which will probably
+ // whether an incomplete type is abstract. See CWG1640, which will probably
// supersede this one and remove this rule.
struct B;
int &s = f<B>(0);
@@ -625,20 +625,20 @@ namespace dr337 { // dr337: yes
struct B { virtual ~B() = 0; };
}
-namespace dr339 { // dr339: 2.8
+namespace cwg339 { // cwg339: 2.8
template <int I> struct A { static const int value = I; };
char xxx(int);
char (&xxx(float))[2];
- template<class T> A<sizeof(xxx((T)0))> f(T) {} // #dr339-f
+ template<class T> A<sizeof(xxx((T)0))> f(T) {} // #cwg339-f
void test() {
A<1> a = f(0);
A<2> b = f(0.0f);
A<3> c = f("foo");
// expected-error at -1 {{no matching function}}
- // expected-note@#dr339-f {{candidate}}
+ // expected-note@#cwg339-f {{candidate}}
}
@@ -658,50 +658,50 @@ namespace dr339 { // dr339: 2.8
A<1> c = make_A<char>();
}
-namespace dr340 { // dr340: yes
+namespace cwg340 { // cwg340: yes
struct A { A(int); };
struct B { B(A, A, int); };
int x, y;
B b(A(x), A(y), 3);
}
-namespace dr341 { // dr341: sup 1708
+namespace cwg341 { // cwg341: sup 1708
namespace A {
int n;
- extern "C" int &dr341_a = n; // #dr341_a
+ extern "C" int &cwg341_a = n; // #cwg341_a
}
namespace B {
- extern "C" int &dr341_a = dr341_a;
- // expected-error at -1 {{redefinition of 'dr341_a'}}
- // expected-note@#dr341_a {{previous definition is here}}
+ extern "C" int &cwg341_a = cwg341_a;
+ // expected-error at -1 {{redefinition of 'cwg341_a'}}
+ // expected-note@#cwg341_a {{previous definition is here}}
}
- extern "C" void dr341_b(); // #dr341_b
+ extern "C" void cwg341_b(); // #cwg341_b
}
-int dr341_a;
-// expected-error at -1 {{declaration of 'dr341_a' in global scope conflicts with declaration with C language linkage}}
-// expected-note@#dr341_a {{declared with C language linkage here}}
-int dr341_b;
-// expected-error at -1 {{declaration of 'dr341_b' in global scope conflicts with declaration with C language linkage}}
-// expected-note@#dr341_b {{declared with C language linkage here}}
-int dr341_c; // #dr341_c
-int dr341_d; // #dr341_d
-namespace dr341 {
- extern "C" int dr341_c;
- // expected-error at -1 {{declaration of 'dr341_c' with C language linkage conflicts with declaration in global scope}}
- // expected-note@#dr341_c {{declared in global scope here}}
- extern "C" void dr341_d();
- // expected-error at -1 {{declaration of 'dr341_d' with C language linkage conflicts with declaration in global scope}}
- // expected-note@#dr341_d {{declared in global scope here}}
-
- namespace A { extern "C" int dr341_e; } // #dr341_e
- namespace B { extern "C" void dr341_e(); }
- // expected-error at -1 {{redefinition of 'dr341_e' as
diff erent kind of symbol}}
- // expected-note@#dr341_e {{previous definition is here}}
+int cwg341_a;
+// expected-error at -1 {{declaration of 'cwg341_a' in global scope conflicts with declaration with C language linkage}}
+// expected-note@#cwg341_a {{declared with C language linkage here}}
+int cwg341_b;
+// expected-error at -1 {{declaration of 'cwg341_b' in global scope conflicts with declaration with C language linkage}}
+// expected-note@#cwg341_b {{declared with C language linkage here}}
+int cwg341_c; // #cwg341_c
+int cwg341_d; // #cwg341_d
+namespace cwg341 {
+ extern "C" int cwg341_c;
+ // expected-error at -1 {{declaration of 'cwg341_c' with C language linkage conflicts with declaration in global scope}}
+ // expected-note@#cwg341_c {{declared in global scope here}}
+ extern "C" void cwg341_d();
+ // expected-error at -1 {{declaration of 'cwg341_d' with C language linkage conflicts with declaration in global scope}}
+ // expected-note@#cwg341_d {{declared in global scope here}}
+
+ namespace A { extern "C" int cwg341_e; } // #cwg341_e
+ namespace B { extern "C" void cwg341_e(); }
+ // expected-error at -1 {{redefinition of 'cwg341_e' as
diff erent kind of symbol}}
+ // expected-note@#cwg341_e {{previous definition is here}}
}
-// dr342: na
+// cwg342: na
-namespace dr343 { // dr343: no
+namespace cwg343 { // cwg343: no
// FIXME: dup 1710
template<typename T> struct A {
template<typename U> struct B {};
@@ -714,32 +714,32 @@ namespace dr343 { // dr343: no
};
}
-namespace dr344 { // dr344: dup 1435
+namespace cwg344 { // cwg344: dup 1435
struct A { inline virtual ~A(); };
struct B { friend A::~A(); };
}
-namespace dr345 { // dr345: yes
+namespace cwg345 { // cwg345: yes
struct A {
struct X {};
- int X; // #dr345-int-X
+ int X; // #cwg345-int-X
};
struct B {
struct X {};
};
template <class T> void f(T t) { typename T::X x; }
- // expected-error at -1 {{typename specifier refers to non-type member 'X' in 'dr345::A'}}
- // expected-note@#dr345-f-a {{in instantiation of function template specialization 'dr345::f<dr345::A>' requested here}}
- // expected-note@#dr345-int-X {{referenced member 'X' is declared here}}
+ // expected-error at -1 {{typename specifier refers to non-type member 'X' in 'cwg345::A'}}
+ // expected-note@#cwg345-f-a {{in instantiation of function template specialization 'cwg345::f<cwg345::A>' requested here}}
+ // expected-note@#cwg345-int-X {{referenced member 'X' is declared here}}
void f(A a, B b) {
f(b);
- f(a); // #dr345-f-a
+ f(a); // #cwg345-f-a
}
}
-// dr346: na
+// cwg346: na
-namespace dr347 { // dr347: yes
+namespace cwg347 { // cwg347: yes
struct base {
struct nested;
static int n;
@@ -750,31 +750,31 @@ namespace dr347 { // dr347: yes
struct derived : base {};
struct derived::nested {};
- // expected-error at -1 {{no struct named 'nested' in 'dr347::derived'}}
+ // expected-error at -1 {{no struct named 'nested' in 'cwg347::derived'}}
int derived::n;
- // expected-error at -1 {{no member named 'n' in 'dr347::derived'}}
+ // expected-error at -1 {{no member named 'n' in 'cwg347::derived'}}
void derived::f() {}
- // expected-error at -1 {{out-of-line definition of 'f' does not match any declaration in 'dr347::derived'}}
+ // expected-error at -1 {{out-of-line definition of 'f' does not match any declaration in 'cwg347::derived'}}
void derived::g() {}
- // expected-error at -1 {{out-of-line definition of 'g' does not match any declaration in 'dr347::derived'}}
+ // expected-error at -1 {{out-of-line definition of 'g' does not match any declaration in 'cwg347::derived'}}
}
-// dr348: na
+// cwg348: na
-namespace dr349 { // dr349: no
+namespace cwg349 { // cwg349: no
struct A {
template <class T> operator T ***() {
int ***p = 0;
return p;
// cxx98-20-error at -1 {{cannot initialize return object of type 'const int ***' with an lvalue of type 'int ***'}}
// since-cxx23-error at -2 {{cannot initialize return object of type 'const int ***' with an rvalue of type 'int ***'}}
- // expected-note@#dr349-p1 {{in instantiation of function template specialization 'dr349::A::operator const int ***<const int>' requested here}}
+ // expected-note@#cwg349-p1 {{in instantiation of function template specialization 'cwg349::A::operator const int ***<const int>' requested here}}
}
};
// FIXME: This is valid.
A a;
- const int *const *const *p1 = a; // #dr349-p1
+ const int *const *const *p1 = a; // #cwg349-p1
struct B {
template <class T> operator T ***() {
@@ -788,28 +788,28 @@ namespace dr349 { // dr349: no
const int *const *const *p2 = b;
}
-// dr351: na
+// cwg351: na
-namespace dr352 { // dr352: 2.8
+namespace cwg352 { // cwg352: 2.8
namespace example1 {
namespace A {
enum E {};
- template<typename R, typename A> void foo(E, R (*)(A)); // #dr352-foo
+ template<typename R, typename A> void foo(E, R (*)(A)); // #cwg352-foo
}
template<typename T> void arg(T);
- template<typename T> int arg(T) = delete; // #dr352-deleted
+ template<typename T> int arg(T) = delete; // #cwg352-deleted
// cxx98-error at -1 {{deleted function definitions are a C++11 extension}}
void f(A::E e) {
foo(e, &arg);
// expected-error at -1 {{no matching function for call to 'foo'}}
- // expected-note@#dr352-foo {{candidate template ignored: couldn't infer template argument 'R'}}
+ // expected-note@#cwg352-foo {{candidate template ignored: couldn't infer template argument 'R'}}
using A::foo;
foo<int, int>(e, &arg);
// expected-error at -1 {{attempt to use a deleted function}}
- // expected-note@#dr352-deleted {{'arg<int>' has been explicitly marked deleted here}}
+ // expected-note@#cwg352-deleted {{'arg<int>' has been explicitly marked deleted here}}
}
int arg(int);
@@ -817,7 +817,7 @@ namespace dr352 { // dr352: 2.8
void g(A::E e) {
foo(e, &arg);
// expected-error at -1 {{no matching function for call to 'foo'}}
- // expected-note@#dr352-foo {{candidate template ignored: couldn't infer template argument 'R'}}
+ // expected-note@#cwg352-foo {{candidate template ignored: couldn't infer template argument 'R'}}
using A::foo;
foo<int, int>(e, &arg); // ok, uses non-template
@@ -826,7 +826,7 @@ namespace dr352 { // dr352: 2.8
namespace contexts {
template<int I> void f1(int (&)[I]);
- template<int I> void f2(int (&)[I+1]); // #dr352-f2
+ template<int I> void f2(int (&)[I+1]); // #cwg352-f2
template<int I> void f3(int (&)[I+1], int (&)[I]);
void f() {
int a[4];
@@ -834,13 +834,13 @@ namespace dr352 { // dr352: 2.8
f1(a);
f2(a);
// expected-error at -1 {{no matching function for call to 'f2'}}
- // expected-note@#dr352-f2 {{candidate template ignored: couldn't infer template argument 'I'}}
+ // expected-note@#cwg352-f2 {{candidate template ignored: couldn't infer template argument 'I'}}
f3(a, b);
}
template<int I> struct S {};
template<int I> void g1(S<I>);
- template<int I> void g2(S<I+1>); // #dr352-g2
+ template<int I> void g2(S<I+1>); // #cwg352-g2
template<int I> void g3(S<I+1>, S<I>);
void g() {
S<4> a;
@@ -848,24 +848,24 @@ namespace dr352 { // dr352: 2.8
g1(a);
g2(a);
// expected-error at -1 {{no matching function for call to 'g2'}}
- // expected-note@#dr352-g2 {{candidate template ignored: couldn't infer template argument 'I'}}
+ // expected-note@#cwg352-g2 {{candidate template ignored: couldn't infer template argument 'I'}}
g3(a, b);
}
- template<typename T> void h1(T = 0); // #dr352-h1
+ template<typename T> void h1(T = 0); // #cwg352-h1
template<typename T> void h2(T, T = 0);
void h() {
h1();
// expected-error at -1 {{no matching function for call to 'h1'}}
- // expected-note@#dr352-h1 {{candidate template ignored: couldn't infer template argument 'T'}}
+ // expected-note@#cwg352-h1 {{candidate template ignored: couldn't infer template argument 'T'}}
h1(0);
h1<int>();
h2(0);
}
template<typename T> int tmpl(T);
- template<typename R, typename A> void i1(R (*)(A)); // #dr352-i1
- template<typename R, typename A> void i2(R, A, R (*)(A)); // #dr352-i2
+ template<typename R, typename A> void i1(R (*)(A)); // #cwg352-i1
+ template<typename R, typename A> void i2(R, A, R (*)(A)); // #cwg352-i2
void i() {
extern int single(int);
i1(single);
@@ -874,20 +874,20 @@ namespace dr352 { // dr352: 2.8
extern int ambig(float), ambig(int);
i1(ambig);
// expected-error at -1 {{no matching function for call to 'i1'}}
- // expected-note@#dr352-i1 {{candidate template ignored: couldn't infer template argument 'R'}}
+ // expected-note@#cwg352-i1 {{candidate template ignored: couldn't infer template argument 'R'}}
i2(0, 0, ambig);
extern void no_match(float), no_match(int);
i1(no_match);
// expected-error at -1 {{no matching function for call to 'i1'}}
- // expected-note@#dr352-i1 {{candidate template ignored: couldn't infer template argument 'R'}}
+ // expected-note@#cwg352-i1 {{candidate template ignored: couldn't infer template argument 'R'}}
i2(0, 0, no_match);
// expected-error at -1 {{no matching function for call to 'i2'}}
- // expected-note@#dr352-i2 {{candidate function [with R = int, A = int] not viable: no overload of 'no_match' matching 'int (*)(int)' for 3rd argument}}
+ // expected-note@#cwg352-i2 {{candidate function [with R = int, A = int] not viable: no overload of 'no_match' matching 'int (*)(int)' for 3rd argument}}
i1(tmpl);
// expected-error at -1 {{no matching function for call to 'i1'}}
- // expected-note@#dr352-i1 {{candidate template ignored: couldn't infer template argument 'R'}}
+ // expected-note@#cwg352-i1 {{candidate template ignored: couldn't infer template argument 'R'}}
i2(0, 0, tmpl);
}
}
@@ -918,109 +918,109 @@ namespace dr352 { // dr352: 2.8
namespace example5 {
template<int I> class A {};
- template<int I> void g(A<I+1>); // #dr352-g
+ template<int I> void g(A<I+1>); // #cwg352-g
template<int I> void f(A<I>, A<I+1>);
void h(A<1> a1, A<2> a2) {
g(a1);
// expected-error at -1 {{no matching function for call to 'g'}}
- // expected-note@#dr352-g {{candidate template ignored: couldn't infer template argument 'I'}}
+ // expected-note@#cwg352-g {{candidate template ignored: couldn't infer template argument 'I'}}
g<0>(a1);
f(a1, a2);
}
}
}
-// dr353 needs an IRGen test.
+// cwg353 needs an IRGen test.
-namespace dr354 { // dr354: yes c++11
+namespace cwg354 { // cwg354: yes c++11
// FIXME: Should we allow this in C++98 too?
struct S {};
- template<int*> struct ptr {}; // #dr354-ptr
- ptr<0> p0; // #dr354-p0
- // cxx98-error@#dr354-p0 {{non-type template argument does not refer to any declaration}}
- // cxx98-note@#dr354-ptr {{template parameter is declared here}}
- // cxx11-14-error@#dr354-p0 {{null non-type template argument must be cast to template parameter type 'int *'}}
- // cxx11-14-note@#dr354-ptr {{template parameter is declared here}}
- // since-cxx17-error@#dr354-p0 {{conversion from 'int' to 'int *' is not allowed in a converted constant expression}}
+ template<int*> struct ptr {}; // #cwg354-ptr
+ ptr<0> p0; // #cwg354-p0
+ // cxx98-error@#cwg354-p0 {{non-type template argument does not refer to any declaration}}
+ // cxx98-note@#cwg354-ptr {{template parameter is declared here}}
+ // cxx11-14-error@#cwg354-p0 {{null non-type template argument must be cast to template parameter type 'int *'}}
+ // cxx11-14-note@#cwg354-ptr {{template parameter is declared here}}
+ // since-cxx17-error@#cwg354-p0 {{conversion from 'int' to 'int *' is not allowed in a converted constant expression}}
ptr<(int*)0> p1;
// cxx98-error at -1 {{non-type template argument does not refer to any declaration}}
- // cxx98-note@#dr354-ptr {{template parameter is declared here}}
- ptr<(float*)0> p2; // #dr354-p2
- // cxx98-error@#dr354-p2 {{non-type template argument does not refer to any declaration}}
- // cxx98-note@#dr354-ptr {{template parameter is declared here}}
- // cxx11-14-error@#dr354-p2 {{null non-type template argument of type 'float *' does not match template parameter of type 'int *'}}
- // cxx11-14-note@#dr354-ptr {{template parameter is declared here}}
- // since-cxx17-error@#dr354-p2 {{value of type 'float *' is not implicitly convertible to 'int *'}}
- ptr<(int S::*)0> p3; // #dr354-p3
- // cxx98-error@#dr354-p3 {{non-type template argument does not refer to any declaration}}
- // cxx98-note@#dr354-ptr {{template parameter is declared here}}
- // cxx11-14-error@#dr354-p3 {{null non-type template argument of type 'int dr354::S::*' does not match template parameter of type 'int *'}}
- // cxx11-14-note@#dr354-ptr {{template parameter is declared here}}
- // since-cxx17-error@#dr354-p3 {{value of type 'int dr354::S::*' is not implicitly convertible to 'int *'}}
-
- template<int*> int both(); // #dr354-both-int-ptr
- template<int> int both(); // #dr354-both-int
+ // cxx98-note@#cwg354-ptr {{template parameter is declared here}}
+ ptr<(float*)0> p2; // #cwg354-p2
+ // cxx98-error@#cwg354-p2 {{non-type template argument does not refer to any declaration}}
+ // cxx98-note@#cwg354-ptr {{template parameter is declared here}}
+ // cxx11-14-error@#cwg354-p2 {{null non-type template argument of type 'float *' does not match template parameter of type 'int *'}}
+ // cxx11-14-note@#cwg354-ptr {{template parameter is declared here}}
+ // since-cxx17-error@#cwg354-p2 {{value of type 'float *' is not implicitly convertible to 'int *'}}
+ ptr<(int S::*)0> p3; // #cwg354-p3
+ // cxx98-error@#cwg354-p3 {{non-type template argument does not refer to any declaration}}
+ // cxx98-note@#cwg354-ptr {{template parameter is declared here}}
+ // cxx11-14-error@#cwg354-p3 {{null non-type template argument of type 'int cwg354::S::*' does not match template parameter of type 'int *'}}
+ // cxx11-14-note@#cwg354-ptr {{template parameter is declared here}}
+ // since-cxx17-error@#cwg354-p3 {{value of type 'int cwg354::S::*' is not implicitly convertible to 'int *'}}
+
+ template<int*> int both(); // #cwg354-both-int-ptr
+ template<int> int both(); // #cwg354-both-int
int b0 = both<0>();
int b1 = both<(int*)0>();
// cxx98-error at -1 {{no matching function for call to 'both'}}
- // cxx98-note@#dr354-both-int-ptr {{candidate template ignored: invalid explicitly-specified argument for 1st template parameter}}
- // cxx98-note@#dr354-both-int {{candidate template ignored: invalid explicitly-specified argument for 1st template parameter}}
-
- template<int S::*> struct ptr_mem {}; // #dr354-ptr_mem
- ptr_mem<0> m0; // #dr354-m0
- // cxx98-error@#dr354-m0 {{non-type template argument of type 'int' cannot be converted to a value of type 'int dr354::S::*'}}
- // cxx98-note@#dr354-ptr_mem {{template parameter is declared here}}
- // cxx11-14-error@#dr354-m0 {{null non-type template argument must be cast to template parameter type 'int dr354::S::*'}}
- // cxx11-14-note@#dr354-ptr_mem {{template parameter is declared here}}
- // since-cxx17-error@#dr354-m0 {{conversion from 'int' to 'int dr354::S::*' is not allowed in a converted constant expression}}
+ // cxx98-note@#cwg354-both-int-ptr {{candidate template ignored: invalid explicitly-specified argument for 1st template parameter}}
+ // cxx98-note@#cwg354-both-int {{candidate template ignored: invalid explicitly-specified argument for 1st template parameter}}
+
+ template<int S::*> struct ptr_mem {}; // #cwg354-ptr_mem
+ ptr_mem<0> m0; // #cwg354-m0
+ // cxx98-error@#cwg354-m0 {{non-type template argument of type 'int' cannot be converted to a value of type 'int cwg354::S::*'}}
+ // cxx98-note@#cwg354-ptr_mem {{template parameter is declared here}}
+ // cxx11-14-error@#cwg354-m0 {{null non-type template argument must be cast to template parameter type 'int cwg354::S::*'}}
+ // cxx11-14-note@#cwg354-ptr_mem {{template parameter is declared here}}
+ // since-cxx17-error@#cwg354-m0 {{conversion from 'int' to 'int cwg354::S::*' is not allowed in a converted constant expression}}
ptr_mem<(int S::*)0> m1;
// cxx98-error at -1 {{non-type template argument is not a pointer to member constant}}
- ptr_mem<(float S::*)0> m2; // #dr354-m2
- // cxx98-error@#dr354-m2 {{non-type template argument of type 'float dr354::S::*' cannot be converted to a value of type 'int dr354::S::*'}}
- // cxx98-note@#dr354-ptr_mem {{template parameter is declared here}}
- // cxx11-14-error@#dr354-m2 {{null non-type template argument of type 'float dr354::S::*' does not match template parameter of type 'int dr354::S::*'}}
- // cxx11-14-note@#dr354-ptr_mem {{template parameter is declared here}}
- // since-cxx17-error@#dr354-m2 {{value of type 'float dr354::S::*' is not implicitly convertible to 'int dr354::S::*'}}
- ptr_mem<(int *)0> m3; // #dr354-m3
- // cxx98-error@#dr354-m3 {{non-type template argument of type 'int *' cannot be converted to a value of type 'int dr354::S::*'}}
- // cxx98-note@#dr354-ptr_mem {{template parameter is declared here}}
- // cxx11-14-error@#dr354-m3 {{null non-type template argument of type 'int *' does not match template parameter of type 'int dr354::S::*'}}
- // cxx11-14-note@#dr354-ptr_mem {{template parameter is declared here}}
- // since-cxx17-error@#dr354-m3 {{value of type 'int *' is not implicitly convertible to 'int dr354::S::*'}}
+ ptr_mem<(float S::*)0> m2; // #cwg354-m2
+ // cxx98-error@#cwg354-m2 {{non-type template argument of type 'float cwg354::S::*' cannot be converted to a value of type 'int cwg354::S::*'}}
+ // cxx98-note@#cwg354-ptr_mem {{template parameter is declared here}}
+ // cxx11-14-error@#cwg354-m2 {{null non-type template argument of type 'float cwg354::S::*' does not match template parameter of type 'int cwg354::S::*'}}
+ // cxx11-14-note@#cwg354-ptr_mem {{template parameter is declared here}}
+ // since-cxx17-error@#cwg354-m2 {{value of type 'float cwg354::S::*' is not implicitly convertible to 'int cwg354::S::*'}}
+ ptr_mem<(int *)0> m3; // #cwg354-m3
+ // cxx98-error@#cwg354-m3 {{non-type template argument of type 'int *' cannot be converted to a value of type 'int cwg354::S::*'}}
+ // cxx98-note@#cwg354-ptr_mem {{template parameter is declared here}}
+ // cxx11-14-error@#cwg354-m3 {{null non-type template argument of type 'int *' does not match template parameter of type 'int cwg354::S::*'}}
+ // cxx11-14-note@#cwg354-ptr_mem {{template parameter is declared here}}
+ // since-cxx17-error@#cwg354-m3 {{value of type 'int *' is not implicitly convertible to 'int cwg354::S::*'}}
}
-struct dr355_S; // dr355: yes
-struct ::dr355_S {};
-// expected-warning at -1 {{extra qualification on member 'dr355_S'}}
-namespace dr355 { struct ::dr355_S s; }
+struct cwg355_S; // cwg355: yes
+struct ::cwg355_S {};
+// expected-warning at -1 {{extra qualification on member 'cwg355_S'}}
+namespace cwg355 { struct ::cwg355_S s; }
-// dr356: na
+// cwg356: na
-namespace dr357 { // dr357: yes
+namespace cwg357 { // cwg357: yes
template<typename T> struct A {
- void f() const; // #dr357-f
+ void f() const; // #cwg357-f
};
template<typename T> void A<T>::f() {}
// expected-error at -1 {{out-of-line definition of 'f' does not match any declaration in 'A<T>'}}
- // expected-note@#dr357-f {{member declaration does not match because it is const qualified}}
+ // expected-note@#cwg357-f {{member declaration does not match because it is const qualified}}
struct B {
template<typename T> void f();
};
template<typename T> void B::f() const {}
- // expected-error at -1 {{out-of-line definition of 'f' does not match any declaration in 'dr357::B'}}
+ // expected-error at -1 {{out-of-line definition of 'f' does not match any declaration in 'cwg357::B'}}
}
-namespace dr358 { // dr358: yes
- extern "C" void dr358_f();
+namespace cwg358 { // cwg358: yes
+ extern "C" void cwg358_f();
namespace N {
int var;
- extern "C" void dr358_f() { var = 10; }
+ extern "C" void cwg358_f() { var = 10; }
}
}
-namespace dr359 { // dr359: yes
+namespace cwg359 { // cwg359: yes
// Note, the example in the DR is wrong; it doesn't contain an anonymous
// union.
struct E {
@@ -1049,7 +1049,7 @@ namespace dr359 { // dr359: yes
};
}
-namespace dr360 { // dr360: yes
+namespace cwg360 { // cwg360: yes
struct A {
int foo();
int bar();
@@ -1060,28 +1060,28 @@ struct A {
struct B : A {
private:
- using A::foo; // #dr360-using-foo
+ using A::foo; // #cwg360-using-foo
protected:
- using A::bar; // #dr360-using-bar
+ using A::bar; // #cwg360-using-bar
public:
using A::baz;
};
int main() {
int foo = B().foo();
- // expected-error at -1 {{'foo' is a private member of 'dr360::B'}}
- // expected-note@#dr360-using-foo {{declared private here}}
+ // expected-error at -1 {{'foo' is a private member of 'cwg360::B'}}
+ // expected-note@#cwg360-using-foo {{declared private here}}
int bar = B().bar();
- // expected-error at -1 {{'bar' is a protected member of 'dr360::B'}}
- // expected-note@#dr360-using-bar {{declared protected here}}
+ // expected-error at -1 {{'bar' is a protected member of 'cwg360::B'}}
+ // expected-note@#cwg360-using-bar {{declared protected here}}
int baz = B().baz();
}
-} // namespace dr360
+} // namespace cwg360
-// dr362: na
-// dr363: na
+// cwg362: na
+// cwg363: na
-namespace dr364 { // dr364: yes
+namespace cwg364 { // cwg364: yes
struct S {
static void f(int);
void f(char);
@@ -1094,11 +1094,11 @@ namespace dr364 { // dr364: yes
}
}
-// dr366: yes
+// cwg366: yes
#if "foo" // expected-error {{invalid token at start of a preprocessor expression}}
#endif
-namespace dr367 { // dr367: yes
+namespace cwg367 { // cwg367: yes
// FIXME: These diagnostics are terrible. Don't diagnose an ill-formed global
// array as being a VLA!
int a[true ? throw 0 : 4];
@@ -1116,30 +1116,30 @@ namespace dr367 { // dr367: yes
// cxx98-error at -2 {{variable length array folded to constant array as an extension}}
}
-namespace dr368 { // dr368: 3.6
- template<typename T, T> struct S {}; // #dr368-S
+namespace cwg368 { // cwg368: 3.6
+ template<typename T, T> struct S {}; // #cwg368-S
template<typename T> int f(S<T, T()> *);
// expected-error at -1 {{template argument for non-type template parameter is treated as function type 'T ()'}}
- // expected-note@#dr368-S {{template parameter is declared here}}
- template<typename T> int g(S<T, (T())> *); // #dr368-g
- template<typename T> int g(S<T, true ? T() : T()> *); // #dr368-g-2
+ // expected-note@#cwg368-S {{template parameter is declared here}}
+ template<typename T> int g(S<T, (T())> *); // #cwg368-g
+ template<typename T> int g(S<T, true ? T() : T()> *); // #cwg368-g-2
struct X {};
- int n = g<X>(0); // #dr368-g-call
- // cxx98-17-error@#dr368-g-call {{no matching function for call to 'g'}}
- // cxx98-17-note@#dr368-g {{candidate template ignored: substitution failure [with T = X]: a non-type template parameter cannot have type 'X' before C++20}}
- // cxx98-17-note@#dr368-g-2 {{candidate template ignored: substitution failure [with T = X]: a non-type template parameter cannot have type 'X' before C++20}}
- // cxx20-23-error@#dr368-g-call {{call to 'g' is ambiguous}}
- // cxx20-23-note@#dr368-g {{candidate function [with T = dr368::X]}}
- // cxx20-23-note@#dr368-g-2 {{candidate function [with T = dr368::X]}}
+ int n = g<X>(0); // #cwg368-g-call
+ // cxx98-17-error@#cwg368-g-call {{no matching function for call to 'g'}}
+ // cxx98-17-note@#cwg368-g {{candidate template ignored: substitution failure [with T = X]: a non-type template parameter cannot have type 'X' before C++20}}
+ // cxx98-17-note@#cwg368-g-2 {{candidate template ignored: substitution failure [with T = X]: a non-type template parameter cannot have type 'X' before C++20}}
+ // cxx20-23-error@#cwg368-g-call {{call to 'g' is ambiguous}}
+ // cxx20-23-note@#cwg368-g {{candidate function [with T = cwg368::X]}}
+ // cxx20-23-note@#cwg368-g-2 {{candidate function [with T = cwg368::X]}}
}
-// dr370: na
+// cwg370: na
-namespace dr372 { // dr372: no
+namespace cwg372 { // cwg372: no
namespace example1 {
template<typename T> struct X {
protected:
- typedef T Type; // #dr372-ex1-Type
+ typedef T Type; // #cwg372-ex1-Type
};
template<typename T> struct Y {};
@@ -1150,55 +1150,55 @@ namespace dr372 { // dr372: no
template<typename> class T2> struct Z1 :
T1<T>,
T2<typename T1<T>::Type> {};
- // expected-error at -1 {{'Type' is a protected member of 'dr372::example1::X<int>'}}
- // expected-note@#dr372-z1 {{in instantiation of template class 'dr372::example1::Z1<int, dr372::example1::X, dr372::example1::Y>' requested here}}
- // expected-note@#dr372-ex1-Type {{declared protected here}}
+ // expected-error at -1 {{'Type' is a protected member of 'cwg372::example1::X<int>'}}
+ // expected-note@#cwg372-z1 {{in instantiation of template class 'cwg372::example1::Z1<int, cwg372::example1::X, cwg372::example1::Y>' requested here}}
+ // expected-note@#cwg372-ex1-Type {{declared protected here}}
template<typename T,
template<typename> class T1,
template<typename> class T2> struct Z2 :
T2<typename T1<T>::Type>,
- // expected-error at -1 {{'Type' is a protected member of 'dr372::example1::X<int>'}}
- // expected-note@#dr372-z2 {{in instantiation of template class 'dr372::example1::Z2<int, dr372::example1::X, dr372::example1::Y>' requested here}}
- // expected-note@#dr372-ex1-Type {{declared protected here}}
+ // expected-error at -1 {{'Type' is a protected member of 'cwg372::example1::X<int>'}}
+ // expected-note@#cwg372-z2 {{in instantiation of template class 'cwg372::example1::Z2<int, cwg372::example1::X, cwg372::example1::Y>' requested here}}
+ // expected-note@#cwg372-ex1-Type {{declared protected here}}
T1<T> {};
- Z1<int, X, Y> z1; // #dr372-z1
- Z2<int, X, Y> z2; // #dr372-z2
+ Z1<int, X, Y> z1; // #cwg372-z1
+ Z2<int, X, Y> z2; // #cwg372-z2
}
namespace example2 {
struct X {
private:
- typedef int Type; // #dr372-ex2-Type
+ typedef int Type; // #cwg372-ex2-Type
};
template<typename T> struct A {
typename T::Type t;
- // expected-error at -1 {{'Type' is a private member of 'dr372::example2::X'}}
- // expected-note@#dr372-ax {{in instantiation of template class 'dr372::example2::A<dr372::example2::X>' requested here}}
- // expected-note@#dr372-ex2-Type {{declared private here}}
+ // expected-error at -1 {{'Type' is a private member of 'cwg372::example2::X'}}
+ // expected-note@#cwg372-ax {{in instantiation of template class 'cwg372::example2::A<cwg372::example2::X>' requested here}}
+ // expected-note@#cwg372-ex2-Type {{declared private here}}
};
- A<X> ax; // #dr372-ax
+ A<X> ax; // #cwg372-ax
}
namespace example3 {
struct A {
protected:
- typedef int N; // #dr372-N
+ typedef int N; // #cwg372-N
};
template<typename T> struct B {};
template<typename U> struct C : U, B<typename U::N> {};
- // expected-error at -1 {{'N' is a protected member of 'dr372::example3::A'}}
- // expected-note@#dr372-x {{in instantiation of template class 'dr372::example3::C<dr372::example3::A>' requested here}}
- // expected-note@#dr372-N {{declared protected here}}
+ // expected-error at -1 {{'N' is a protected member of 'cwg372::example3::A'}}
+ // expected-note@#cwg372-x {{in instantiation of template class 'cwg372::example3::C<cwg372::example3::A>' requested here}}
+ // expected-note@#cwg372-N {{declared protected here}}
template<typename U> struct D : B<typename U::N>, U {};
- // expected-error at -1 {{'N' is a protected member of 'dr372::example3::A'}}
- // expected-note@#dr372-y {{in instantiation of template class 'dr372::example3::D<dr372::example3::A>' requested here}}
- // expected-note@#dr372-N {{declared protected here}}
+ // expected-error at -1 {{'N' is a protected member of 'cwg372::example3::A'}}
+ // expected-note@#cwg372-y {{in instantiation of template class 'cwg372::example3::D<cwg372::example3::A>' requested here}}
+ // expected-note@#cwg372-N {{declared protected here}}
- C<A> x; // #dr372-x
- D<A> y; // #dr372-y
+ C<A> x; // #cwg372-x
+ D<A> y; // #cwg372-y
}
namespace example4 {
@@ -1219,49 +1219,49 @@ namespace dr372 { // dr372: no
namespace std_example {
class A {
protected:
- struct B {}; // #dr372-B-std
+ struct B {}; // #cwg372-B-std
};
struct D : A::B, A {};
- // expected-error at -1 {{'B' is a protected member of 'dr372::std_example::A'}}
- // expected-note@#dr372-B-std {{declared protected here}}
+ // expected-error at -1 {{'B' is a protected member of 'cwg372::std_example::A'}}
+ // expected-note@#cwg372-B-std {{declared protected here}}
}
// FIXME: This is valid: deriving from A::B gives access to A::B!
namespace badwolf {
class A {
protected:
- struct B; // #dr372-B
+ struct B; // #cwg372-B
};
struct A::B : A {};
struct C : A::B {};
- // expected-error at -1 {{'B' is a protected member of 'dr372::badwolf::A'}}
- // expected-note@#dr372-B {{declared protected here}}
+ // expected-error at -1 {{'B' is a protected member of 'cwg372::badwolf::A'}}
+ // expected-note@#cwg372-B {{declared protected here}}
}
}
-namespace dr373 { // dr373: 5
- namespace X { int dr373; }
- struct dr373 { // #dr373-struct
+namespace cwg373 { // cwg373: 5
+ namespace X { int cwg373; }
+ struct cwg373 { // #cwg373-struct
void f() {
- using namespace dr373::X;
- int k = dr373;
- // expected-error at -1 {{'dr373' does not refer to a value}}
- // expected-note@#dr373-struct {{declared here}}
- namespace Y = dr373::X;
- k = Y::dr373;
+ using namespace cwg373::X;
+ int k = cwg373;
+ // expected-error at -1 {{'cwg373' does not refer to a value}}
+ // expected-note@#cwg373-struct {{declared here}}
+ namespace Y = cwg373::X;
+ k = Y::cwg373;
}
};
- struct A { struct B {}; }; // #dr373-A
+ struct A { struct B {}; }; // #cwg373-A
namespace X = A::B;
// expected-error at -1 {{expected namespace name}}
- // expected-note@#dr373-A {{'A' declared here}}
+ // expected-note@#cwg373-A {{'A' declared here}}
using namespace A::B;
// expected-error at -1 {{expected namespace name}}
- // expected-note@#dr373-A {{'A' declared here}}
+ // expected-note@#cwg373-A {{'A' declared here}}
}
-namespace dr374 { // dr374: 7
+namespace cwg374 { // cwg374: 7
// NB 2.9 c++11
namespace N {
template<typename T> void f();
@@ -1272,10 +1272,10 @@ namespace dr374 { // dr374: 7
template<> struct N::A<int> {};
}
-// dr375: dup 345
-// dr376: na
+// cwg375: dup 345
+// cwg376: na
-namespace dr377 { // dr377: yes
+namespace cwg377 { // cwg377: yes
enum E {
// expected-error at -1 {{enumeration values exceed range of largest integer}}
a = -__LONG_LONG_MAX__ - 1,
@@ -1286,10 +1286,10 @@ namespace dr377 { // dr377: yes
};
}
-// dr378: dup 276
-// dr379: na
+// cwg378: dup 276
+// cwg379: na
-namespace dr381 { // dr381: yes
+namespace cwg381 { // cwg381: yes
struct A {
int a;
};
@@ -1301,26 +1301,26 @@ namespace dr381 { // dr381: yes
void f() {
E e;
e.B::a = 0;
- /* expected-error at -1 {{ambiguous conversion from derived class 'E' to base class 'dr381::B':
- struct dr381::E -> C -> B
- struct dr381::E -> D -> B}} */
+ /* expected-error at -1 {{ambiguous conversion from derived class 'E' to base class 'cwg381::B':
+ struct cwg381::E -> C -> B
+ struct cwg381::E -> D -> B}} */
F f;
f.A::a = 1;
}
}
-namespace dr382 { // dr382: yes c++11
+namespace cwg382 { // cwg382: yes c++11
// FIXME: Should we allow this in C++98 mode?
struct A { typedef int T; };
typename A::T t;
// cxx98-error at -1 {{'typename' occurs outside of a template}}
- typename dr382::A a;
+ typename cwg382::A a;
// cxx98-error at -1 {{'typename' occurs outside of a template}}
typename A b;
// expected-error at -1 {{expected a qualified name after 'typename'}}
}
-namespace dr383 { // dr383: yes
+namespace cwg383 { // cwg383: yes
struct A { A &operator=(const A&); };
struct B { ~B(); };
union C { C &operator=(const C&); };
@@ -1328,7 +1328,7 @@ namespace dr383 { // dr383: yes
int check[(__is_pod(A) || __is_pod(B) || __is_pod(C) || __is_pod(D)) ? -1 : 1];
}
-namespace dr384 { // dr384: yes
+namespace cwg384 { // cwg384: yes
namespace N1 {
template<typename T> struct Base {};
template<typename T> struct X {
@@ -1350,35 +1350,35 @@ namespace dr384 { // dr384: yes
}
}
-namespace dr385 { // dr385: 2.8
+namespace cwg385 { // cwg385: 2.8
struct A { protected: void f(); };
struct B : A { using A::f; };
struct C : A { void g(B b) { b.f(); } };
void h(B b) { b.f(); }
- struct D { int n; }; // #dr385-n
- struct E : protected D {}; // #dr385-E
+ struct D { int n; }; // #cwg385-n
+ struct E : protected D {}; // #cwg385-E
struct F : E { friend int i(E); };
int i(E e) { return e.n; }
- // expected-error at -1 {{'n' is a protected member of 'dr385::D'}}
- // expected-note@#dr385-E {{constrained by protected inheritance here}}
- // expected-note@#dr385-n {{member is declared here}}
+ // expected-error at -1 {{'n' is a protected member of 'cwg385::D'}}
+ // expected-note@#cwg385-E {{constrained by protected inheritance here}}
+ // expected-note@#cwg385-n {{member is declared here}}
}
-namespace dr387 { // dr387: 2.8
+namespace cwg387 { // cwg387: 2.8
namespace old {
template<typename T> class number {
- number(int); // #dr387-number-ctor
+ number(int); // #cwg387-number-ctor
friend number gcd(number &x, number &y) {}
};
void g() {
number<double> a(3);
- // expected-error at -1 {{calling a private constructor of class 'dr387::old::number<double>'}}
- // expected-note@#dr387-number-ctor {{implicitly declared private here}}
+ // expected-error at -1 {{calling a private constructor of class 'cwg387::old::number<double>'}}
+ // expected-note@#cwg387-number-ctor {{implicitly declared private here}}
number<double> b(4);
- // expected-error at -1 {{calling a private constructor of class 'dr387::old::number<double>'}}
- // expected-note@#dr387-number-ctor {{implicitly declared private here}}
+ // expected-error at -1 {{calling a private constructor of class 'cwg387::old::number<double>'}}
+ // expected-note@#cwg387-number-ctor {{implicitly declared private here}}
a = gcd(a, b);
b = gcd(3, 4);
// expected-error at -1 {{use of undeclared identifier 'gcd'}}
@@ -1401,14 +1401,14 @@ namespace dr387 { // dr387: 2.8
}
}
-// FIXME: dr388 needs libc++abi test
+// FIXME: cwg388 needs libc++abi test
-namespace dr389 { // dr389: no
+namespace cwg389 { // cwg389: no
struct S {
typedef struct {} A;
typedef enum {} B;
- typedef struct {} const C; // #dr389-C
- typedef enum {} const D; // #dr389-D
+ typedef struct {} const C; // #cwg389-C
+ typedef enum {} const D; // #cwg389-D
};
template<typename> struct T {};
@@ -1422,8 +1422,8 @@ namespace dr389 { // dr389: no
typedef void (*WithLinkage8)(WithLinkage2 WithLinkage1::*, WithLinkage5 *);
typedef T<WithLinkage5> WithLinkage9;
- typedef struct {} *WithoutLinkage1; // #dr389-no-link-1
- typedef enum {} const WithoutLinkage2; // #dr389-no-link-2
+ typedef struct {} *WithoutLinkage1; // #cwg389-no-link-1
+ typedef enum {} const WithoutLinkage2; // #cwg389-no-link-2
// These two types don't have linkage even though they are externally visible
// and the ODR requires them to be merged across TUs.
typedef S::C WithoutLinkage3;
@@ -1451,19 +1451,19 @@ namespace dr389 { // dr389: no
typedef T<WithoutLinkage1> BadArg1;
// expected-error at -1 {{template argument uses unnamed type}}
- // expected-note@#dr389-no-link-1 {{unnamed type used in template argument was declared here}}
+ // expected-note@#cwg389-no-link-1 {{unnamed type used in template argument was declared here}}
typedef T<WithoutLinkage2> BadArg2;
// expected-error at -1 {{template argument uses unnamed type}}
- // expected-note@#dr389-no-link-2 {{unnamed type used in template argument was declared here}}
+ // expected-note@#cwg389-no-link-2 {{unnamed type used in template argument was declared here}}
typedef T<WithoutLinkage3> BadArg3;
// expected-error at -1 {{template argument uses unnamed type}}
- // expected-note@#dr389-C {{unnamed type used in template argument was declared here}}
+ // expected-note@#cwg389-C {{unnamed type used in template argument was declared here}}
typedef T<WithoutLinkage4> BadArg4;
// expected-error at -1 {{template argument uses unnamed type}}
- // expected-note@#dr389-D {{unnamed type used in template argument was declared here}}
+ // expected-note@#cwg389-D {{unnamed type used in template argument was declared here}}
typedef T<WithoutLinkage5> BadArg5;
// expected-error at -1 {{template argument uses unnamed type}}
- // expected-note@#dr389-C {{unnamed type used in template argument was declared here}}
+ // expected-note@#cwg389-C {{unnamed type used in template argument was declared here}}
#endif
extern WithLinkage1 withLinkage1;
@@ -1488,11 +1488,11 @@ namespace dr389 { // dr389: no
// OK, extern "C".
extern "C" {
- extern WithoutLinkage1 dr389_withoutLinkage1;
- extern WithoutLinkage2 dr389_withoutLinkage2;
- extern WithoutLinkage3 dr389_withoutLinkage3;
- extern WithoutLinkage4 dr389_withoutLinkage4;
- extern WithoutLinkage5 dr389_withoutLinkage5;
+ extern WithoutLinkage1 cwg389_withoutLinkage1;
+ extern WithoutLinkage2 cwg389_withoutLinkage2;
+ extern WithoutLinkage3 cwg389_withoutLinkage3;
+ extern WithoutLinkage4 cwg389_withoutLinkage4;
+ extern WithoutLinkage5 cwg389_withoutLinkage5;
}
// OK, defined.
@@ -1511,9 +1511,9 @@ namespace dr389 { // dr389: no
use(&withoutLinkage1); use(&withoutLinkage2); use(&withoutLinkage3);
use(&withoutLinkage4); use(&withoutLinkage5);
- use(&dr389_withoutLinkage1); use(&dr389_withoutLinkage2);
- use(&dr389_withoutLinkage3); use(&dr389_withoutLinkage4);
- use(&dr389_withoutLinkage5);
+ use(&cwg389_withoutLinkage1); use(&cwg389_withoutLinkage2);
+ use(&cwg389_withoutLinkage3); use(&cwg389_withoutLinkage4);
+ use(&cwg389_withoutLinkage5);
use(&withoutLinkageDef1); use(&withoutLinkageDef2); use(&withoutLinkageDef3);
use(&withoutLinkageDef4); use(&withoutLinkageDef5);
@@ -1525,39 +1525,39 @@ namespace dr389 { // dr389: no
}
}
-namespace dr390 { // dr390: 3.3
+namespace cwg390 { // cwg390: 3.3
template<typename T>
struct A {
A() { f(); }
- // expected-warning at -1 {{call to pure virtual member function 'f' has undefined behavior; overrides of 'f' in subclasses are not available in the constructor of 'dr390::A<int>'}}
- // expected-note@#dr390-A-int {{in instantiation of member function 'dr390::A<int>::A' requested here}}
- // expected-note@#dr390-f {{'f' declared here}}
- virtual void f() = 0; // #dr390-f
+ // expected-warning at -1 {{call to pure virtual member function 'f' has undefined behavior; overrides of 'f' in subclasses are not available in the constructor of 'cwg390::A<int>'}}
+ // expected-note@#cwg390-A-int {{in instantiation of member function 'cwg390::A<int>::A' requested here}}
+ // expected-note@#cwg390-f {{'f' declared here}}
+ virtual void f() = 0; // #cwg390-f
virtual ~A() = 0;
};
template<typename T> A<T>::~A() { T::error; }
// expected-error at -1 {{type 'int' cannot be used prior to '::' because it has no members}}
- // expected-note@#dr390-A-int {{in instantiation of member function 'dr390::A<int>::~A' requested here}}
+ // expected-note@#cwg390-A-int {{in instantiation of member function 'cwg390::A<int>::~A' requested here}}
template<typename T> void A<T>::f() { T::error; } // ok, not odr-used
- struct B : A<int> { // #dr390-A-int
+ struct B : A<int> { // #cwg390-A-int
void f() {}
} b;
}
-namespace dr391 { // dr391: 2.8 c++11
+namespace cwg391 { // cwg391: 2.8 c++11
// FIXME: Should this apply to C++98 too?
- class A { A(const A&); }; // #dr391-A
+ class A { A(const A&); }; // #cwg391-A
A fa();
const A &a = fa();
- // cxx98-error at -1 {{C++98 requires an accessible copy constructor for class 'dr391::A' when binding a reference to a temporary; was private}}
- // cxx98-note@#dr391-A {{implicitly declared private here}}
+ // cxx98-error at -1 {{C++98 requires an accessible copy constructor for class 'cwg391::A' when binding a reference to a temporary; was private}}
+ // cxx98-note@#cwg391-A {{implicitly declared private here}}
- struct B { B(const B&) = delete; }; // #dr391-B
+ struct B { B(const B&) = delete; }; // #cwg391-B
// cxx98-error at -1 {{deleted function definitions are a C++11 extension}}
B fb();
const B &b = fb();
// cxx98-error at -1 {{copying variable of type 'B' invokes deleted constructor}}
- // cxx98-note@#dr391-B {{'B' has been explicitly marked deleted here}}
+ // cxx98-note@#cwg391-B {{'B' has been explicitly marked deleted here}}
template<typename T>
struct C {
@@ -1567,9 +1567,9 @@ namespace dr391 { // dr391: 2.8 c++11
const C<int> &c = fc();
}
-// dr392 is in dr392.cpp
+// cwg392 is in cwg392.cpp
-namespace dr393 { // dr393: 2.7
+namespace cwg393 { // cwg393: 2.7
template <typename T>
struct S {};
@@ -1585,11 +1585,11 @@ void h() {
T (*p) [] = (U(*)[])0;
sp_assert_convertible<T[]>( (U(*)[])0 );
}
-} // namespace dr393
+} // namespace cwg393
-// dr394: na
+// cwg394: na
-namespace dr395 { // dr395: 3.0
+namespace cwg395 { // cwg395: 3.0
struct S {
template <typename T, int N>(&operator T())[N];
// expected-error at -1 {{cannot specify any part of a return type in the declaration of a conversion function}}
@@ -1613,13 +1613,13 @@ namespace dr395 { // dr395: 3.0
};
template <class T, class U>
- operator typename ptr_mem_fun_t<T, U>::type() const { // #dr395-conv-func
+ operator typename ptr_mem_fun_t<T, U>::type() const { // #cwg395-conv-func
return 0;
}
} null1;
int (S::*p)() = null1;
- // expected-error at -1 {{no viable conversion from 'struct null1_t' to 'int (dr395::S::*)()'}}
- // expected-note@#dr395-conv-func {{candidate template ignored: couldn't infer template argument 'T'}}
+ // expected-error at -1 {{no viable conversion from 'struct null1_t' to 'int (cwg395::S::*)()'}}
+ // expected-note@#cwg395-conv-func {{candidate template ignored: couldn't infer template argument 'T'}}
template <typename T> using id = T;
// cxx98-error at -1 {{alias declarations are a C++11 extension}}
@@ -1637,22 +1637,22 @@ namespace dr395 { // dr395: 3.0
int (S::*q)() = null2;
}
-namespace dr396 { // dr396: yes
+namespace cwg396 { // cwg396: yes
void f() {
auto int a();
// since-cxx11-error at -1 {{'auto' storage class specifier is not permitted in C++11, and will not be supported in future releases}}
// expected-error at -2 {{illegal storage class on function}}
- int (i); // #dr396-i
+ int (i); // #cwg396-i
auto int (i);
// since-cxx11-error at -1 {{'auto' storage class specifier is not permitted in C++11, and will not be supported in future releases}}
// expected-error at -2 {{redefinition of 'i'}}
- // expected-note@#dr396-i {{previous definition is here}}
+ // expected-note@#cwg396-i {{previous definition is here}}
}
}
-// dr397: sup 1823
+// cwg397: sup 1823
-namespace dr398 { // dr398: yes
+namespace cwg398 { // cwg398: yes
namespace example1 {
struct S {
static int const I = 42;
@@ -1666,9 +1666,9 @@ namespace dr398 { // dr398: yes
namespace example2 {
template <int I> struct X {};
template <template <class T> class> struct Z {};
- template <class T> void f(typename T::Y *) {} // #dr398-f
- template <class T> void g(X<T::N> *) {} // #dr398-g
- template <class T> void h(Z<T::template TT> *) {} // #dr398-h
+ template <class T> void f(typename T::Y *) {} // #cwg398-f
+ template <class T> void g(X<T::N> *) {} // #cwg398-g
+ template <class T> void h(Z<T::template TT> *) {} // #cwg398-h
struct A {};
struct B {
int Y;
@@ -1683,23 +1683,23 @@ namespace dr398 { // dr398: yes
void test() {
f<A>(0);
// expected-error at -1 {{no matching function for call to 'f'}}
- // expected-note@#dr398-f {{candidate template ignored: substitution failure [with T = A]: no type named 'Y' in 'dr398::example2::A'}}
+ // expected-note@#cwg398-f {{candidate template ignored: substitution failure [with T = A]: no type named 'Y' in 'cwg398::example2::A'}}
f<B>(0);
// expected-error at -1 {{no matching function for call to 'f'}}
- // expected-note@#dr398-f {{candidate template ignored: substitution failure [with T = B]: typename specifier refers to non-type member 'Y' in 'dr398::example2::B'}}
+ // expected-note@#cwg398-f {{candidate template ignored: substitution failure [with T = B]: typename specifier refers to non-type member 'Y' in 'cwg398::example2::B'}}
g<C>(0);
// expected-error at -1 {{no matching function for call to 'g'}}
- // expected-note@#dr398-g {{candidate template ignored: substitution failure [with T = C]: missing 'typename' prior to dependent type name 'C::N'}}
+ // expected-note@#cwg398-g {{candidate template ignored: substitution failure [with T = C]: missing 'typename' prior to dependent type name 'C::N'}}
h<D>(0);
// expected-error at -1 {{no matching function for call to 'h'}}
- // expected-note@#dr398-h {{candidate template ignored: substitution failure [with T = D]: 'TT' following the 'template' keyword does not refer to a template}}
+ // expected-note@#cwg398-h {{candidate template ignored: substitution failure [with T = D]: 'TT' following the 'template' keyword does not refer to a template}}
}
}
}
-namespace dr399 { // dr399: 11
- // NB: reuse dr244 test
- struct B {}; // #dr399-B
+namespace cwg399 { // cwg399: 11
+ // NB: reuse cwg244 test
+ struct B {}; // #cwg399-B
struct D : B {};
D D_object;
@@ -1708,18 +1708,18 @@ namespace dr399 { // dr399: 11
void f() {
D_object.~B();
- // expected-error at -1 {{destructor type 'dr399::B' in object destruction expression does not match the type 'D' of the object being destroyed}}
- // expected-note@#dr399-B {{type 'dr399::B' found by destructor name lookup}}
+ // expected-error at -1 {{destructor type 'cwg399::B' in object destruction expression does not match the type 'D' of the object being destroyed}}
+ // expected-note@#cwg399-B {{type 'cwg399::B' found by destructor name lookup}}
D_object.B::~B();
D_object.D::~B(); // FIXME: Missing diagnostic for this.
B_ptr->~B();
B_ptr->~B_alias();
B_ptr->B_alias::~B();
B_ptr->B_alias::~B_alias();
- B_ptr->dr399::~B();
- // expected-error at -1 {{qualified member access refers to a member in namespace 'dr399'}}
- B_ptr->dr399::~B_alias();
- // expected-error at -1 {{qualified member access refers to a member in namespace 'dr399'}}
+ B_ptr->cwg399::~B();
+ // expected-error at -1 {{qualified member access refers to a member in namespace 'cwg399'}}
+ B_ptr->cwg399::~B_alias();
+ // expected-error at -1 {{qualified member access refers to a member in namespace 'cwg399'}}
}
template<typename T, typename U>
@@ -1731,10 +1731,10 @@ namespace dr399 { // dr399: 11
B_ptr->~B_alias();
B_ptr->B_alias::~B();
B_ptr->B_alias::~B_alias();
- B_ptr->dr399::~B();
- // expected-error at -1 {{'dr399' does not refer to a type name in pseudo-destructor expression; expected the name of type 'T'}}
- B_ptr->dr399::~B_alias();
- // expected-error at -1 {{'dr399' does not refer to a type name in pseudo-destructor expression; expected the name of type 'T'}}
+ B_ptr->cwg399::~B();
+ // expected-error at -1 {{'cwg399' does not refer to a type name in pseudo-destructor expression; expected the name of type 'T'}}
+ B_ptr->cwg399::~B_alias();
+ // expected-error at -1 {{'cwg399' does not refer to a type name in pseudo-destructor expression; expected the name of type 'T'}}
}
template void f<B, D>(B*, D);
@@ -1743,7 +1743,7 @@ namespace dr399 { // dr399: 11
typedef E<int> F;
}
void g(N::F f) {
- typedef N::F G; // #dr399-G
+ typedef N::F G; // #cwg399-G
f.~G();
f.G::~E();
// expected-error at -1 {{ISO C++ requires the name after '::~' to be found in the same scope as the name before '::~'}}
@@ -1762,7 +1762,7 @@ namespace dr399 { // dr399: 11
// Rejecting this seems correct, but most compilers accept, so we do also.
f.N::F::~G();
// expected-error at -1 {{qualified destructor name only found in lexical scope; omit the qualifier to find this type name by unqualified lookup}}
- // expected-note@#dr399-G {{type 'G' (aka 'E<int>') found by destructor name lookup}}
+ // expected-note@#cwg399-G {{type 'G' (aka 'E<int>') found by destructor name lookup}}
}
// Bizarrely, compilers perform lookup in the scope for qualified destructor
@@ -1774,17 +1774,17 @@ namespace dr399 { // dr399: 11
}
template <typename U> void f(typename N::S<U>::Inner *p) {
typedef typename N::S<U>::Inner T;
- p->::dr399::QualifiedLookupInScope::N::S<U>::Inner::~T();
- // expected-error at -1 {{no type named 'T' in 'dr399::QualifiedLookupInScope::N::S<int>'}}
- // expected-note@#dr399-f {{in instantiation of function template specialization 'dr399::QualifiedLookupInScope::f<int>' requested here}}
+ p->::cwg399::QualifiedLookupInScope::N::S<U>::Inner::~T();
+ // expected-error at -1 {{no type named 'T' in 'cwg399::QualifiedLookupInScope::N::S<int>'}}
+ // expected-note@#cwg399-f {{in instantiation of function template specialization 'cwg399::QualifiedLookupInScope::f<int>' requested here}}
}
- template void f<int>(N::S<int>::Inner *); // #dr399-f
+ template void f<int>(N::S<int>::Inner *); // #cwg399-f
template <typename U> void g(U *p) {
typedef U T;
p->T::~T();
p->U::~T();
- p->::dr399::QualifiedLookupInScope::N::S<int>::Inner::~T();
+ p->::cwg399::QualifiedLookupInScope::N::S<int>::Inner::~T();
// expected-error at -1 {{'T' does not refer to a type name in pseudo-destructor expression; expected the name of type 'U'}}
}
template void g(N::S<int>::Inner *);
diff --git a/clang/test/CXX/drs/dr4xx.cpp b/clang/test/CXX/drs/dr4xx.cpp
index 9b7a9777202f20..611b791470785d 100644
--- a/clang/test/CXX/drs/dr4xx.cpp
+++ b/clang/test/CXX/drs/dr4xx.cpp
@@ -11,56 +11,56 @@ __extension__ typedef __SIZE_TYPE__ size_t;
namespace std { struct type_info; }
-namespace dr400 { // dr400: yes
- struct A { int a; struct a {}; }; // #dr400-A
- struct B { int a; struct a {}; }; // #dr400-B
+namespace cwg400 { // cwg400: yes
+ struct A { int a; struct a {}; }; // #cwg400-A
+ struct B { int a; struct a {}; }; // #cwg400-B
struct C : A, B { using A::a; struct a b; };
struct D : A, B {
using A::a;
// FIXME: we should issue a single diagnostic
- using B::a; // #dr400-using-B-a
- // expected-error@#dr400-using-B-a {{target of using declaration conflicts with declaration already in scope}}
- // expected-note@#dr400-B {{target of using declaration}}
- // expected-note@#dr400-A {{conflicting declaration}}
- // expected-error@#dr400-using-B-a {{target of using declaration conflicts with declaration already in scope}}
- // expected-note@#dr400-B {{target of using declaration}}
- // expected-note@#dr400-A {{conflicting declaration}}
+ using B::a; // #cwg400-using-B-a
+ // expected-error@#cwg400-using-B-a {{target of using declaration conflicts with declaration already in scope}}
+ // expected-note@#cwg400-B {{target of using declaration}}
+ // expected-note@#cwg400-A {{conflicting declaration}}
+ // expected-error@#cwg400-using-B-a {{target of using declaration conflicts with declaration already in scope}}
+ // expected-note@#cwg400-B {{target of using declaration}}
+ // expected-note@#cwg400-A {{conflicting declaration}}
struct a b;
};
struct E : A, B { struct a b; };
// expected-error at -1 {{member 'a' found in multiple base classes of
diff erent types}}
- // expected-note@#dr400-A {{member type 'dr400::A::a' found by ambiguous name lookup}}
- // expected-note@#dr400-B {{member type 'dr400::B::a' found by ambiguous name lookup}}
-}
-
-namespace dr401 { // dr401: 2.8
- template<class T, class U = typename T::type> class A : public T {}; // #dr401-A
- // expected-error@#dr401-A {{'type' is a private member of 'dr401::C'}}
- // expected-note@#dr402-friend-A-C {{in instantiation of default argument for 'A<C>' required here}}
- // expected-note@#dr402-C-type {{implicitly declared private here}}
- // expected-error@#dr401-A {{'type' is a protected member of 'dr401::B'}}
- // expected-note@#dr402-b {{in instantiation of default argument for 'A<B>' required here}}
- // expected-note@#dr402-B-type {{declared protected here}}
- // expected-error@#dr401-A {{'type' is a private member of 'dr401::D'}}
- // expected-note@#dr402-d {{in instantiation of default argument for 'A<D>' required here}}
- // expected-note@#dr402-D-type {{implicitly declared private here}}
+ // expected-note@#cwg400-A {{member type 'cwg400::A::a' found by ambiguous name lookup}}
+ // expected-note@#cwg400-B {{member type 'cwg400::B::a' found by ambiguous name lookup}}
+}
+
+namespace cwg401 { // cwg401: 2.8
+ template<class T, class U = typename T::type> class A : public T {}; // #cwg401-A
+ // expected-error@#cwg401-A {{'type' is a private member of 'cwg401::C'}}
+ // expected-note@#cwg402-friend-A-C {{in instantiation of default argument for 'A<C>' required here}}
+ // expected-note@#cwg402-C-type {{implicitly declared private here}}
+ // expected-error@#cwg401-A {{'type' is a protected member of 'cwg401::B'}}
+ // expected-note@#cwg402-b {{in instantiation of default argument for 'A<B>' required here}}
+ // expected-note@#cwg402-B-type {{declared protected here}}
+ // expected-error@#cwg401-A {{'type' is a private member of 'cwg401::D'}}
+ // expected-note@#cwg402-d {{in instantiation of default argument for 'A<D>' required here}}
+ // expected-note@#cwg402-D-type {{implicitly declared private here}}
class B {
protected:
- typedef int type; // #dr402-B-type
+ typedef int type; // #cwg402-B-type
};
class C {
- typedef int type; // #dr402-C-type
- friend class A<C>; // #dr402-friend-A-C
+ typedef int type; // #cwg402-C-type
+ friend class A<C>; // #cwg402-friend-A-C
};
class D {
- typedef int type; // #dr402-D-type
+ typedef int type; // #cwg402-D-type
friend class A<D, int>;
};
- A<B> *b; // #dr402-b
- A<D> *d; // #dr402-d
+ A<B> *b; // #cwg402-b
+ A<D> *d; // #cwg402-d
struct E {
template<class T, class U = typename T::type> class A : public T {};
@@ -73,18 +73,18 @@ namespace dr401 { // dr401: 2.8
// FIXME: Why do we get
diff erent diagnostics in C++11 onwards here? We seem
// to not treat the default template argument as a SFINAE context in C++98.
- template<class T, class U = typename T::type> void f(T) {} // #dr402-f
+ template<class T, class U = typename T::type> void f(T) {} // #cwg402-f
// cxx98-error at -1 {{default template arguments for a function template are a C++11 extension}}
- // cxx98-error at -2 {{'type' is a protected member of 'dr401::B'}}
+ // cxx98-error at -2 {{'type' is a protected member of 'cwg401::B'}}
// cxx98-note at -3 {{in instantiation of default argument for 'f<B>' required here}}
- // cxx98-note@#dr402-f-b {{while substituting deduced template arguments into function template 'f' [with T = B, U = (no value)]}}
- // cxx98-note@#dr402-B-type {{declared protected here}}
- void g(B b) { f(b); } // #dr402-f-b
+ // cxx98-note@#cwg402-f-b {{while substituting deduced template arguments into function template 'f' [with T = B, U = (no value)]}}
+ // cxx98-note@#cwg402-B-type {{declared protected here}}
+ void g(B b) { f(b); } // #cwg402-f-b
// since-cxx11-error at -1 {{no matching function for call to 'f'}}
- // since-cxx11-note@#dr402-f {{candidate template ignored: substitution failure [with T = B, U = typename B::type]: 'type' is a protected member of 'dr401::B'}}
+ // since-cxx11-note@#cwg402-f {{candidate template ignored: substitution failure [with T = B, U = typename B::type]: 'type' is a protected member of 'cwg401::B'}}
}
-namespace dr403 { // dr403: yes
+namespace cwg403 { // cwg403: yes
namespace A {
struct S {};
int f(void*);
@@ -98,10 +98,10 @@ namespace dr403 { // dr403: yes
// template-id as we can make it.
}
-// dr404: na
+// cwg404: na
// (NB: also sup 594)
-namespace dr405 { // dr405: yes
+namespace cwg405 { // cwg405: yes
// NB: also dup 218
namespace A {
struct S {};
@@ -145,7 +145,7 @@ namespace dr405 { // dr405: yes
// expected-error at -1 {{use of undeclared identifier 'f'}}
}
-namespace dr406 { // dr406: 2.9
+namespace cwg406 { // cwg406: 2.9
typedef struct {
static int n;
// expected-error at -1 {{static data member 'n' not allowed in anonymous struct}}
@@ -156,35 +156,35 @@ namespace dr406 { // dr406: 2.9
} B;
}
-namespace dr407 { // dr407: 3.8
- // NB: reused by dr1894 and dr2199
+namespace cwg407 { // cwg407: 3.8
+ // NB: reused by cwg1894 and cwg2199
struct S;
typedef struct S S;
void f() {
struct S *p;
{
- typedef struct S S; // #dr407-typedef-S
+ typedef struct S S; // #cwg407-typedef-S
struct S *p;
// expected-error at -1 {{typedef 'S' cannot be referenced with a struct specifier}}
- // expected-note@#dr407-typedef-S {{declared here}}
+ // expected-note@#cwg407-typedef-S {{declared here}}
}
}
struct S {};
namespace UsingDir {
namespace A {
- struct S {}; // #dr407-A-S
+ struct S {}; // #cwg407-A-S
}
namespace B {
- typedef int S; // #dr407-B-S
+ typedef int S; // #cwg407-B-S
}
namespace C {
using namespace A;
using namespace B;
struct S s;
// expected-error at -1 {{ambiguous}}
- // expected-note@#dr407-A-S {{candidate found by name lookup is 'dr407::UsingDir::A::S'}}
- // expected-note@#dr407-B-S {{candidate found by name lookup is 'dr407::UsingDir::B::S'}}
+ // expected-note@#cwg407-A-S {{candidate found by name lookup is 'cwg407::UsingDir::A::S'}}
+ // expected-note@#cwg407-B-S {{candidate found by name lookup is 'cwg407::UsingDir::B::S'}}
}
namespace D {
using A::S;
@@ -193,7 +193,7 @@ namespace dr407 { // dr407: 3.8
}
namespace E {
// The standard doesn't say whether this is valid. We interpret
- // DR407 as meaning "if lookup finds both a tag and a typedef with the
+ // CWG407 as meaning "if lookup finds both a tag and a typedef with the
// same type, then it's OK in an elaborated-type-specifier".
typedef A::S S;
using A::S;
@@ -216,7 +216,7 @@ namespace dr407 { // dr407: 3.8
}
}
-namespace dr408 { // dr408: 3.4
+namespace cwg408 { // cwg408: 3.4
template<int N> void g() { int arr[N != 1 ? 1 : -1]; }
template<> void g<2>() { }
@@ -245,7 +245,7 @@ namespace dr408 { // dr408: 3.4
template void R<int>::f();
}
-namespace dr409 { // dr409: yes
+namespace cwg409 { // cwg409: yes
template<typename T> struct A {
typedef int B;
B b1;
@@ -256,7 +256,7 @@ namespace dr409 { // dr409: yes
};
}
-namespace dr410 { // dr410: no
+namespace cwg410 { // cwg410: no
template<class T> void f(T);
void g(int);
namespace M {
@@ -269,7 +269,7 @@ namespace dr410 { // dr410: no
template<class T> void i(T);
friend void i<>(int);
private:
- static void z(); // #dr410-z
+ static void z(); // #cwg410-z
};
template<> void h(int) { A::z(); }
@@ -279,13 +279,13 @@ namespace dr410 { // dr410: no
}
template<> void f(int) { M::A::z(); }
void g(int) { M::A::z(); }
- // expected-error at -1 {{'z' is a private member of 'dr410::M::A'}}
- // expected-note@#dr410-z {{declared private here}}
+ // expected-error at -1 {{'z' is a private member of 'cwg410::M::A'}}
+ // expected-note@#cwg410-z {{declared private here}}
}
-// dr412 is in dr412.cpp
+// cwg412 is in cwg412.cpp
-namespace dr413 { // dr413: yes
+namespace cwg413 { // cwg413: yes
struct S {
int a;
int : 17;
@@ -295,7 +295,7 @@ namespace dr413 { // dr413: yes
// expected-error at -1 {{excess elements in struct initializer}}
struct E {};
- struct T { // #dr413-T
+ struct T { // #cwg413-T
int a;
E e;
int b;
@@ -303,10 +303,10 @@ namespace dr413 { // dr413: yes
T t1 = { 1, {}, 2 };
T t2 = { 1, 2 };
// expected-error at -1 {{initializer for aggregate with no elements requires explicit braces}}
- // expected-note@#dr413-T {{'dr413::T' declared here}}
+ // expected-note@#cwg413-T {{'cwg413::T' declared here}}
}
-namespace dr414 { // dr414: dup 305
+namespace cwg414 { // cwg414: dup 305
struct X {};
void f() {
X x;
@@ -315,13 +315,13 @@ namespace dr414 { // dr414: dup 305
}
}
-namespace dr415 { // dr415: yes
+namespace cwg415 { // cwg415: yes
template<typename T> void f(T, ...) { T::error; }
void f(int, int);
void g() { f(0, 0); } // ok
}
-namespace dr416 { // dr416: yes
+namespace cwg416 { // cwg416: yes
extern struct A a;
int &operator+(const A&, const A&);
int &k = a + a;
@@ -329,14 +329,14 @@ namespace dr416 { // dr416: yes
float &f = a + a;
}
-namespace dr417 { // dr417: no
+namespace cwg417 { // cwg417: no
struct A;
- struct dr417::A {};
+ struct cwg417::A {};
// expected-warning at -1 {{extra qualification on member 'A'}}
struct B { struct X; };
struct C : B {};
struct C::X {};
- // expected-error at -1 {{no struct named 'X' in 'dr417::C'}}
+ // expected-error at -1 {{no struct named 'X' in 'cwg417::C'}}
struct B::X { struct Y; };
struct C::X::Y {}; // ok!
namespace N {
@@ -347,24 +347,24 @@ namespace dr417 { // dr417: no
}
// FIXME: This is ill-formed.
using N::D;
- struct dr417::D {};
+ struct cwg417::D {};
// expected-warning at -1 {{extra qualification on member 'D'}}
using namespace N;
- struct dr417::E {};
- // expected-error at -1 {{no struct named 'E' in namespace 'dr417'}}
+ struct cwg417::E {};
+ // expected-error at -1 {{no struct named 'E' in namespace 'cwg417'}}
// expected-warning at -2 {{extra qualification on member 'E'}}
struct N::F {};
struct G;
using N::H;
namespace M {
- struct dr417::G {};
- // expected-error at -1 {{cannot define or redeclare 'G' here because namespace 'M' does not enclose namespace 'dr417'}}
- struct dr417::H {};
- // expected-error at -1 {{cannot define or redeclare 'H' here because namespace 'M' does not enclose namespace 'dr417'}}
+ struct cwg417::G {};
+ // expected-error at -1 {{cannot define or redeclare 'G' here because namespace 'M' does not enclose namespace 'cwg417'}}
+ struct cwg417::H {};
+ // expected-error at -1 {{cannot define or redeclare 'H' here because namespace 'M' does not enclose namespace 'cwg417'}}
}
}
-namespace dr418 { // dr418: no
+namespace cwg418 { // cwg418: no
namespace example1 {
void f1(int, int = 0);
void f1(int = 0, int);
@@ -374,7 +374,7 @@ void g() { f1(); }
namespace example2 {
namespace A {
-void f2(int); // #dr418-f2
+void f2(int); // #cwg418-f2
}
namespace B {
using A::f2;
@@ -386,7 +386,7 @@ void g2() {
using B::f2;
f2();
// expected-error at -1 {{no matching function for call to 'f2'}}
- // expected-note@#dr418-f2 {{candidate function not viable: requires 1 argument, but 0 were provided}}
+ // expected-note@#cwg418-f2 {{candidate function not viable: requires 1 argument, but 0 were provided}}
}
} // namespace example2
@@ -407,9 +407,9 @@ void use() {
f(); // FIXME: this should fail
}
} // namespace example3
-} // namespace dr418
+} // namespace cwg418
-namespace dr420 { // dr420: 9
+namespace cwg420 { // cwg420: 9
template<typename T> struct ptr {
T *operator->() const;
T &operator*() const;
@@ -453,15 +453,15 @@ namespace dr420 { // dr420: 9
q->~id<int>();
p->id<int>::~id<int>();
q->id<int>::~id<int>();
- p->template id<int>::~id<int>(); // OK since dr2292
- q->template id<int>::~id<int>(); // OK since dr2292
+ p->template id<int>::~id<int>(); // OK since cwg2292
+ q->template id<int>::~id<int>(); // OK since cwg2292
p->A::template id<int>::~id<int>();
q->A::template id<int>::~id<int>();
}
#endif
}
-namespace dr421 { // dr421: yes
+namespace cwg421 { // cwg421: yes
struct X { X(); int n; int &r; };
int *p = &X().n;
// cxx98-error at -1 {{taking the address of a temporary object of type 'int'}}
@@ -469,32 +469,32 @@ namespace dr421 { // dr421: yes
int *q = &X().r;
}
-namespace dr422 { // dr422: yes
+namespace cwg422 { // cwg422: yes
template<typename T, typename U> void f() {
- typedef T type; // #dr422-typedef-T
+ typedef T type; // #cwg422-typedef-T
typedef U type;
// expected-error at -1 {{typedef redefinition with
diff erent types ('char' vs 'int')}}
- // expected-note@#dr422-f-int-char {{in instantiation of function template specialization 'dr422::f<int, char>' requested here}}
- // expected-note@#dr422-typedef-T {{previous definition is here}}
+ // expected-note@#cwg422-f-int-char {{in instantiation of function template specialization 'cwg422::f<int, char>' requested here}}
+ // expected-note@#cwg422-typedef-T {{previous definition is here}}
}
template void f<int, int>();
- template void f<int, char>(); // #dr422-f-int-char
+ template void f<int, char>(); // #cwg422-f-int-char
}
-namespace dr423 { // dr423: yes
+namespace cwg423 { // cwg423: yes
template<typename T> struct X { operator T&(); };
void f(X<int> x) { x += 1; }
}
-namespace dr424 { // dr424: yes
+namespace cwg424 { // cwg424: yes
struct A {
- typedef int N; // #dr424-N
+ typedef int N; // #cwg424-N
typedef int N;
// expected-error at -1 {{redefinition of 'N'}}
- // expected-note@#dr424-N {{previous definition is here}}
+ // expected-note@#cwg424-N {{previous definition is here}}
struct X;
- typedef X X; // #dr424-X
+ typedef X X; // #cwg424-X
struct X {};
struct X *p;
@@ -503,20 +503,20 @@ namespace dr424 { // dr424: yes
typedef X X;
// expected-error at -1 {{redefinition of 'X'}}
- // expected-note@#dr424-X {{previous definition is here}}
+ // expected-note@#cwg424-X {{previous definition is here}}
};
struct B {
typedef int M;
};
struct C : B {
- typedef int M; // #dr424-M
+ typedef int M; // #cwg424-M
typedef int M;
// expected-error at -1 {{redefinition of 'M'}}
- // expected-note@#dr424-M {{previous definition is here}}
+ // expected-note@#cwg424-M {{previous definition is here}}
};
}
-namespace dr425 { // dr425: yes
+namespace cwg425 { // cwg425: yes
struct A { template<typename T> operator T() const; } a;
float f = 1.0f * a;
// expected-error at -1 {{use of overloaded operator '*' is ambiguous (with operand types 'float' and 'struct A')}}
@@ -532,10 +532,10 @@ namespace dr425 { // dr425: yes
float g = 1.0f * b; // ok
}
-namespace dr427 { // dr427: yes
+namespace cwg427 { // cwg427: yes
struct B {};
struct D : public B {
- D(B &) = delete; // #dr427-D
+ D(B &) = delete; // #cwg427-D
// cxx98-error at -1 {{deleted function definitions are a C++11 extension}}
};
@@ -545,12 +545,12 @@ namespace dr427 { // dr427: yes
const D &d3 = (const D&)b;
const D &d4(b);
// expected-error at -1 {{conversion function from 'B' to 'const D' invokes a deleted function}}
- // expected-note@#dr427-D {{'D' has been explicitly marked deleted here}}
+ // expected-note@#cwg427-D {{'D' has been explicitly marked deleted here}}
}
-namespace dr428 { // dr428: yes
+namespace cwg428 { // cwg428: yes
template<typename T> T make();
- extern struct X x; // #dr428-X
+ extern struct X x; // #cwg428-X
void f() {
throw void();
// expected-error at -1 {{cannot throw}}
@@ -558,30 +558,30 @@ namespace dr428 { // dr428: yes
throw make<const volatile void*>();
throw x;
// expected-error at -1 {{cannot throw}}
- // expected-note@#dr428-X {{forward declaration of 'dr428::X'}}
+ // expected-note@#cwg428-X {{forward declaration of 'cwg428::X'}}
throw make<X&>();
// expected-error at -1 {{cannot throw}}
- // expected-note@#dr428-X {{forward declaration of 'dr428::X'}}
+ // expected-note@#cwg428-X {{forward declaration of 'cwg428::X'}}
throw make<X*>();
// expected-error at -1 {{cannot throw}}
- // expected-note@#dr428-X {{forward declaration of 'dr428::X'}}
+ // expected-note@#cwg428-X {{forward declaration of 'cwg428::X'}}
throw make<const volatile X&>();
// expected-error at -1 {{cannot throw}}
- // expected-note@#dr428-X {{forward declaration of 'dr428::X'}}
+ // expected-note@#cwg428-X {{forward declaration of 'cwg428::X'}}
throw make<const volatile X*>();
// expected-error at -1 {{cannot throw}}
- // expected-note@#dr428-X {{forward declaration of 'dr428::X'}}
+ // expected-note@#cwg428-X {{forward declaration of 'cwg428::X'}}
}
}
-namespace dr429 { // dr429: 2.8 c++11
+namespace cwg429 { // cwg429: 2.8 c++11
// FIXME: This rule is obviously intended to apply to C++98 as well.
struct A {
static void *operator new(size_t, size_t);
- static void operator delete(void*, size_t); // #dr429-delete
+ static void operator delete(void*, size_t); // #cwg429-delete
} *a = new (0) A;
// since-cxx11-error at -1 {{'new' expression with placement arguments refers to non-placement 'operator delete'}}
- // since-cxx11-note@#dr429-delete {{here}}
+ // since-cxx11-note@#cwg429-delete {{here}}
struct B {
static void *operator new(size_t, size_t);
static void operator delete(void*);
@@ -589,7 +589,7 @@ namespace dr429 { // dr429: 2.8 c++11
} *b = new (0) B; // ok, second delete is not a non-placement deallocation function
}
-namespace dr430 { // dr430: yes c++11
+namespace cwg430 { // cwg430: yes c++11
// resolved by n2239
// FIXME: This should apply in C++98 too.
void f(int n) {
@@ -598,7 +598,7 @@ namespace dr430 { // dr430: yes c++11
}
}
-namespace dr431 { // dr431: yes
+namespace cwg431 { // cwg431: yes
struct A {
template<typename T> T *get();
template<typename T> struct B {
@@ -630,7 +630,7 @@ namespace dr431 { // dr431: yes
}
}
-namespace dr432 { // dr432: 3.0
+namespace cwg432 { // cwg432: 3.0
template<typename T> struct A {};
template<typename T> struct B : A<B> {};
// expected-error at -1 {{use of class template 'B' requires template arguments}}
@@ -643,7 +643,7 @@ namespace dr432 { // dr432: 3.0
#endif
}
-namespace dr433 { // dr433: yes
+namespace cwg433 { // cwg433: yes
template<class T> struct S {
void f(union U*);
};
@@ -653,7 +653,7 @@ namespace dr433 { // dr433: yes
S<int> s;
}
-namespace dr434 { // dr434: sup 2352
+namespace cwg434 { // cwg434: sup 2352
void f() {
const int ci = 0;
int *pi = 0;
@@ -671,16 +671,16 @@ namespace dr434 { // dr434: sup 2352
#endif
}
-// dr435: na
+// cwg435: na
-namespace dr436 { // dr436: yes
- enum E { f }; // #dr436-f
+namespace cwg436 { // cwg436: yes
+ enum E { f }; // #cwg436-f
void f();
// expected-error at -1 {{redefinition of 'f' as
diff erent kind of symbol}}
- // expected-note@#dr436-f {{previous definition is here}}
+ // expected-note@#cwg436-f {{previous definition is here}}
}
-namespace dr437 { // dr437: sup 1308
+namespace cwg437 { // cwg437: sup 1308
// This is superseded by 1308, which is in turn superseded by 1330,
// which restores this rule.
template<typename U> struct T : U {};
@@ -699,46 +699,46 @@ namespace dr437 { // dr437: sup 1308
};
}
-// dr438 is in dr438.cpp
-// dr439 is in dr439.cpp
-// dr441 is in dr441.cpp
-// dr442: sup 348
-// dr443: na
+// cwg438 is in cwg438.cpp
+// cwg439 is in cwg439.cpp
+// cwg441 is in cwg441.cpp
+// cwg442: sup 348
+// cwg443: na
-namespace dr444 { // dr444: yes
+namespace cwg444 { // cwg444: yes
struct D;
- struct B { // #dr444-B
- D &operator=(D &) = delete; // #dr444-deleted
+ struct B { // #cwg444-B
+ D &operator=(D &) = delete; // #cwg444-deleted
// cxx98-error at -1 {{deleted function definitions are a C++11 extension}}
};
- struct D : B { // #dr444-D
+ struct D : B { // #cwg444-D
using B::operator=;
} extern d;
void f() {
d = d;
// expected-error at -1 {{overload resolution selected deleted operator '='}}
- // expected-note@#dr444-deleted {{candidate function has been explicitly deleted}}
- // expected-note@#dr444-D {{candidate function (the implicit copy assignment operator)}}
- // expected-note@#dr444-B {{candidate function (the implicit copy assignment operator)}}
- // since-cxx11-note@#dr444-B {{candidate function (the implicit move assignment operator) not viable: expects an rvalue for 1st argument}}
- // since-cxx11-note@#dr444-D {{candidate function (the implicit move assignment operator) not viable: expects an rvalue for 1st argument}}
+ // expected-note@#cwg444-deleted {{candidate function has been explicitly deleted}}
+ // expected-note@#cwg444-D {{candidate function (the implicit copy assignment operator)}}
+ // expected-note@#cwg444-B {{candidate function (the implicit copy assignment operator)}}
+ // since-cxx11-note@#cwg444-B {{candidate function (the implicit move assignment operator) not viable: expects an rvalue for 1st argument}}
+ // since-cxx11-note@#cwg444-D {{candidate function (the implicit move assignment operator) not viable: expects an rvalue for 1st argument}}
}
}
-namespace dr445 { // dr445: 3.2
- class A { void f(); }; // #dr445-f
+namespace cwg445 { // cwg445: 3.2
+ class A { void f(); }; // #cwg445-f
struct B {
friend void A::f();
- // expected-error at -1 {{friend function 'f' is a private member of 'dr445::A'}}
- // expected-note@#dr445-f {{implicitly declared private here}}
+ // expected-error at -1 {{friend function 'f' is a private member of 'cwg445::A'}}
+ // expected-note@#cwg445-f {{implicitly declared private here}}
};
}
-namespace dr446 { // dr446: 2.8
+namespace cwg446 { // cwg446: 2.8
struct C;
struct A {
A();
- A(const A&) = delete; // #dr446-deleted
+ A(const A&) = delete; // #cwg446-deleted
// cxx98-error at -1 {{deleted function definitions are a C++11 extension}}
A(const C&);
};
@@ -747,28 +747,28 @@ namespace dr446 { // dr446: 2.8
void(b ? a : a);
b ? A() : a;
// expected-error at -1 {{call to deleted constructor of 'A'}}
- // expected-note@#dr446-deleted {{'A' has been explicitly marked deleted here}}
+ // expected-note@#cwg446-deleted {{'A' has been explicitly marked deleted here}}
b ? a : A();
// expected-error at -1 {{call to deleted constructor of 'A'}}
- // expected-note@#dr446-deleted {{'A' has been explicitly marked deleted here}}
+ // expected-note@#cwg446-deleted {{'A' has been explicitly marked deleted here}}
b ? A() : A();
// cxx98-14-error at -1 {{call to deleted constructor of 'A'}}
- // expected-note@#dr446-deleted {{'A' has been explicitly marked deleted here}}
+ // expected-note@#cwg446-deleted {{'A' has been explicitly marked deleted here}}
void(b ? a : c);
b ? a : C();
// expected-error at -1 {{call to deleted constructor of 'A'}}
- // cxx98-14-note@#dr446-deleted {{'A' has been explicitly marked deleted here}}
+ // cxx98-14-note@#cwg446-deleted {{'A' has been explicitly marked deleted here}}
b ? c : A();
// cxx98-14-error at -1 {{call to deleted constructor of 'A'}}
- // cxx98-14-note@#dr446-deleted {{'A' has been explicitly marked deleted here}}
+ // cxx98-14-note@#cwg446-deleted {{'A' has been explicitly marked deleted here}}
b ? A() : C();
// cxx98-14-error at -1 {{call to deleted constructor of 'A'}}
- // cxx98-14-note@#dr446-deleted {{'A' has been explicitly marked deleted here}}
+ // cxx98-14-note@#cwg446-deleted {{'A' has been explicitly marked deleted here}}
}
}
-namespace dr447 { // dr447: yes
+namespace cwg447 { // cwg447: yes
struct A { int n; int a[4]; };
template<int> struct U {
typedef int type;
@@ -796,60 +796,60 @@ namespace dr447 { // dr447: yes
}
}
-namespace dr448 { // dr448: 2.8
- template<typename T = int> void f(int); // #dr448-f-int
+namespace cwg448 { // cwg448: 2.8
+ template<typename T = int> void f(int); // #cwg448-f-int
// cxx98-error at -1 {{default template arguments for a function template are a C++11 extension}}
template<typename T> void g(T t) {
f<T>(t);
// expected-error at -1 {{call to function 'f' that is neither visible in the template definition nor found by argument-dependent lookup}}
- // expected-note@#dr448-g {{in instantiation of function template specialization 'dr448::g<dr448::HideFromADL::X>' requested here}}
- // expected-note@#dr448-f-T {{'f' should be declared prior to the call site or in namespace 'dr448::HideFromADL'}}
- dr448::f(t);
+ // expected-note@#cwg448-g {{in instantiation of function template specialization 'cwg448::g<cwg448::HideFromADL::X>' requested here}}
+ // expected-note@#cwg448-f-T {{'f' should be declared prior to the call site or in namespace 'cwg448::HideFromADL'}}
+ cwg448::f(t);
// expected-error at -1 {{no matching function for call to 'f'}}
- // expected-note@#dr448-f-int {{candidate function template not viable: no known conversion from 'dr448::HideFromADL::X' to 'int' for 1st argument}}
+ // expected-note@#cwg448-f-int {{candidate function template not viable: no known conversion from 'cwg448::HideFromADL::X' to 'int' for 1st argument}}
}
- template<typename T> void f(T); // #dr448-f-T
+ template<typename T> void f(T); // #cwg448-f-T
namespace HideFromADL { struct X {}; }
template void g(int); // ok
- template void g(HideFromADL::X); // #dr448-g
+ template void g(HideFromADL::X); // #cwg448-g
}
-// dr449: na
+// cwg449: na
-namespace dr450 { // dr450: yes
+namespace cwg450 { // cwg450: yes
typedef int A[3];
void f1(const A &);
- void f2(A &); // #dr450-f2
+ void f2(A &); // #cwg450-f2
struct S { A n; };
void g() {
f1(S().n);
f2(S().n);
// expected-error at -1 {{no matching function for call to 'f2'}}}
- // expected-note@#dr450-f2 {{candidate function not viable: expects an lvalue for 1st argument}}
+ // expected-note@#cwg450-f2 {{candidate function not viable: expects an lvalue for 1st argument}}
}
#if __cplusplus >= 201103L
void h() {
f1(A{});
f2(A{});
// expected-error at -1 {{no matching function for call to 'f2'}}}
- // expected-note@#dr450-f2 {{candidate function not viable: expects an lvalue for 1st argument}}
+ // expected-note@#cwg450-f2 {{candidate function not viable: expects an lvalue for 1st argument}}
}
#endif
}
-namespace dr451 { // dr451: yes
+namespace cwg451 { // cwg451: yes
const int a = 1 / 0;
// expected-warning at -1 {{division by zero is undefined}}
- const int b = 1 / 0; // #dr451-b
+ const int b = 1 / 0; // #cwg451-b
// expected-warning at -1 {{division by zero is undefined}}
- int arr[b]; // #dr451-arr
+ int arr[b]; // #cwg451-arr
// expected-error at -1 {{variable length arrays in C++ are a Clang extension}}
// expected-note at -2 {{initializer of 'b' is not a constant expression}}
- // expected-note@#dr451-b {{declared here}}
- // expected-error@#dr451-arr {{variable length array declaration not allowed at file scope}}
+ // expected-note@#cwg451-b {{declared here}}
+ // expected-error@#cwg451-arr {{variable length array declaration not allowed at file scope}}
}
-namespace dr452 { // dr452: yes
+namespace cwg452 { // cwg452: yes
struct A {
int a, b, c;
A *p;
@@ -858,9 +858,9 @@ namespace dr452 { // dr452: yes
};
}
-// dr454 FIXME write a codegen test
+// cwg454 FIXME write a codegen test
-namespace dr456 { // dr456: yes
+namespace cwg456 { // cwg456: yes
// sup 903 c++11
const int null = 0;
void *p = null;
@@ -873,7 +873,7 @@ namespace dr456 { // dr456: yes
// since-cxx11-error at -2 {{cannot initialize a variable of type 'void *' with an lvalue of type 'const bool'}}
}
-namespace dr457 { // dr457: yes
+namespace cwg457 { // cwg457: yes
const int a = 1;
const volatile int b = 1;
int ax[a];
@@ -890,7 +890,7 @@ namespace dr457 { // dr457: yes
};
}
-namespace dr458 { // dr458: 11
+namespace cwg458 { // cwg458: 11
struct A {
int T;
int f();
@@ -906,11 +906,11 @@ namespace dr458 { // dr458: 11
int A::f() {
return T;
}
- template<typename T> // #dr458-g-T
+ template<typename T> // #cwg458-g-T
int A::g() {
return T;
// expected-error at -1 {{'T' does not refer to a value}}
- // expected-note@#dr458-g-T {{declared here}}
+ // expected-note@#cwg458-g-T {{declared here}}
}
template<typename T>
@@ -923,33 +923,33 @@ namespace dr458 { // dr458: 11
return T;
}
template<typename U>
- template<typename T> // #dr458-h-T
+ template<typename T> // #cwg458-h-T
int B<U>::h() {
return T;
// expected-error at -1 {{'T' does not refer to a value}}
- // expected-note@#dr458-h-T {{declared here}}
+ // expected-note@#cwg458-h-T {{declared here}}
}
}
-namespace dr460 { // dr460: yes
+namespace cwg460 { // cwg460: yes
namespace X { namespace Q { int n; } }
namespace Y {
using X;
// expected-error at -1 {{using declaration requires a qualified name}}
- using dr460::X;
+ using cwg460::X;
// expected-error at -1 {{using declaration cannot refer to a namespace}}
using X::Q;
// expected-error at -1 {{using declaration cannot refer to a namespace}}
}
}
-// dr461: na
-// dr462 is in dr462.cpp
-// dr463: na
-// dr464: na
-// dr465: na
+// cwg461: na
+// cwg462 is in cwg462.cpp
+// cwg463: na
+// cwg464: na
+// cwg465: na
-namespace dr466 { // dr466: 2.8
+namespace cwg466 { // cwg466: 2.8
typedef int I;
typedef const int CI;
typedef volatile int VI;
@@ -980,7 +980,7 @@ void g(int a, CI b, VI c) {
}
}
-namespace dr467 { // dr467: yes
+namespace cwg467 { // cwg467: yes
int stuff();
int f() {
@@ -995,51 +995,51 @@ namespace dr467 { // dr467: yes
int g() {
goto later;
// expected-error at -1 {{cannot jump from this goto statement to its label}}
- // expected-note@#dr467-k {{jump bypasses variable initialization}}
- int k = stuff(); // #dr467-k
+ // expected-note@#cwg467-k {{jump bypasses variable initialization}}
+ int k = stuff(); // #cwg467-k
later:
return k;
}
}
-namespace dr468 { // dr468: yes c++11
+namespace cwg468 { // cwg468: yes c++11
// FIXME: Should we allow this in C++98 too?
template<typename> struct A {
template<typename> struct B {
static int C;
};
};
- int k = dr468::template A<int>::template B<char>::C;
+ int k = cwg468::template A<int>::template B<char>::C;
// cxx98-error at -1 {{'template' keyword outside of a template}}
// cxx98-error at -2 {{'template' keyword outside of a template}}
}
-namespace dr469 { // dr469: no
- template<typename T> struct X; // #dr469-X
+namespace cwg469 { // cwg469: no
+ template<typename T> struct X; // #cwg469-X
template<typename T> struct X<const T> {};
X<int&> x;
- // expected-error at -1 {{implicit instantiation of undefined template 'dr469::X<int &>'}}
- // expected-note@#dr469-X {{template is declared here}}
+ // expected-error at -1 {{implicit instantiation of undefined template 'cwg469::X<int &>'}}
+ // expected-note@#cwg469-X {{template is declared here}}
}
-namespace dr470 { // dr470: yes
+namespace cwg470 { // cwg470: yes
template<typename T> struct A {
struct B {};
};
template<typename T> struct C {
};
- template struct A<int>; // #dr470-A-int
+ template struct A<int>; // #cwg470-A-int
template struct A<int>::B;
// expected-error at -1 {{duplicate explicit instantiation of 'B'}}
- // expected-note@#dr470-A-int {{previous explicit instantiation is here}}
+ // expected-note@#cwg470-A-int {{previous explicit instantiation is here}}
// ok, instantiating C<char> doesn't instantiate base class members.
template struct A<char>;
template struct C<char>;
}
-namespace dr471 { // dr471: 2.8
+namespace cwg471 { // cwg471: 2.8
struct A { int n; };
struct B : private virtual A {};
struct C : protected virtual A {};
@@ -1050,50 +1050,50 @@ namespace dr471 { // dr471: 2.8
struct F : E, B { int f() { return n; } };
struct G : virtual A {
private:
- using A::n; // #dr471-G-using
+ using A::n; // #cwg471-G-using
};
struct H : B, G { int f() { return n; } };
- // expected-error at -1 {{'n' is a private member of 'dr471::G'}}
- // expected-note@#dr471-G-using {{declared private here}}
+ // expected-error at -1 {{'n' is a private member of 'cwg471::G'}}
+ // expected-note@#cwg471-G-using {{declared private here}}
}
-namespace dr472 { // dr472: no drafting 2011-04
+namespace cwg472 { // cwg472: no drafting 2011-04
struct B {
- int i; // #dr472-i
+ int i; // #cwg472-i
};
-struct I : protected B {}; // #dr472-struct-I
+struct I : protected B {}; // #cwg472-struct-I
struct D : public I {
void f(I *ip) {
ip->i = 0;
- // expected-error at -1 {{'i' is a protected member of 'dr472::B'}}
- // expected-note@#dr472-struct-I {{constrained by protected inheritance here}}
- // expected-note@#dr472-i {{member is declared here}}
+ // expected-error at -1 {{'i' is a protected member of 'cwg472::B'}}
+ // expected-note@#cwg472-struct-I {{constrained by protected inheritance here}}
+ // expected-note@#cwg472-i {{member is declared here}}
B *bp = ip;
bp->i = 5;
}
};
}
-namespace dr474 { // dr474: 3.4
+namespace cwg474 { // cwg474: 3.4
namespace N {
struct S {
void f();
};
}
void N::S::f() {
- void g(); // #dr474-g
+ void g(); // #cwg474-g
}
int g();
namespace N {
int g();
// expected-error at -1 {{functions that
diff er only in their return type cannot be overloaded}}
- // expected-note@#dr474-g {{previous declaration is here}}
+ // expected-note@#cwg474-g {{previous declaration is here}}
}
}
-// dr475 FIXME write a libc++abi test
+// cwg475 FIXME write a libc++abi test
-namespace dr477 { // dr477: 3.5
+namespace cwg477 { // cwg477: 3.5
struct A {
explicit A();
virtual void f();
@@ -1110,56 +1110,56 @@ namespace dr477 { // dr477: 3.5
// expected-error at -1 {{can only be specified inside the class definition}}
}
-namespace dr478 { // dr478: yes
- struct A { virtual void f() = 0; }; // #dr478-f
+namespace cwg478 { // cwg478: yes
+ struct A { virtual void f() = 0; }; // #cwg478-f
void f(A *a);
void f(A a[10]);
// expected-error at -1 {{array of abstract class type 'A'}}
- // expected-note@#dr478-f {{unimplemented pure virtual method 'f' in 'A'}}
+ // expected-note@#cwg478-f {{unimplemented pure virtual method 'f' in 'A'}}
}
-namespace dr479 { // dr479: 2.8
+namespace cwg479 { // cwg479: 2.8
struct S {
S();
private:
- S(const S&); // #dr479-S-copy-ctor
- ~S(); // #dr479-S-dtor
+ S(const S&); // #cwg479-S-copy-ctor
+ ~S(); // #cwg479-S-dtor
};
void f() {
throw S();
// expected-error at -1 {{temporary of type 'S' has private destructor}}
- // expected-note@#dr479-S-dtor {{declared private here}}
+ // expected-note@#cwg479-S-dtor {{declared private here}}
// expected-error at -3 {{exception object of type 'S' has private destructor}}
- // expected-note@#dr479-S-dtor {{declared private here}}
- // cxx98-error at -5 {{C++98 requires an accessible copy constructor for class 'dr479::S' when binding a reference to a temporary; was private}}
- // cxx98-note@#dr479-S-copy-ctor {{declared private here}}
- // cxx98-14-error at -7 {{calling a private constructor of class 'dr479::S'}}
- // cxx98-14-note@#dr479-S-copy-ctor {{declared private here}}
+ // expected-note@#cwg479-S-dtor {{declared private here}}
+ // cxx98-error at -5 {{C++98 requires an accessible copy constructor for class 'cwg479::S' when binding a reference to a temporary; was private}}
+ // cxx98-note@#cwg479-S-copy-ctor {{declared private here}}
+ // cxx98-14-error at -7 {{calling a private constructor of class 'cwg479::S'}}
+ // cxx98-14-note@#cwg479-S-copy-ctor {{declared private here}}
}
void g() {
S s;
// expected-error at -1 {{variable of type 'S' has private destructor}}
- // expected-note@#dr479-S-dtor {{declared private here}}
+ // expected-note@#cwg479-S-dtor {{declared private here}}
throw s;
// expected-error at -1 {{exception object of type 'S' has private destructor}}
- // expected-note@#dr479-S-dtor {{declared private here}}
- // expected-error at -3 {{calling a private constructor of class 'dr479::S'}}
- // expected-note@#dr479-S-copy-ctor {{declared private here}}
+ // expected-note@#cwg479-S-dtor {{declared private here}}
+ // expected-error at -3 {{calling a private constructor of class 'cwg479::S'}}
+ // expected-note@#cwg479-S-copy-ctor {{declared private here}}
}
void h() {
try {
f();
g();
} catch (S s) {
- // expected-error at -1 {{calling a private constructor of class 'dr479::S'}}
- // expected-note@#dr479-S-copy-ctor {{declared private here}}
+ // expected-error at -1 {{calling a private constructor of class 'cwg479::S'}}
+ // expected-note@#cwg479-S-copy-ctor {{declared private here}}
// expected-error at -3 {{variable of type 'S' has private destructor}}
- // expected-note@#dr479-S-dtor {{declared private here}}
+ // expected-note@#cwg479-S-dtor {{declared private here}}
}
}
}
-namespace dr480 { // dr480: yes
+namespace cwg480 { // cwg480: yes
struct A { int n; };
struct B : A {};
struct C : virtual B {};
@@ -1167,24 +1167,24 @@ namespace dr480 { // dr480: yes
int A::*a = &A::n;
int D::*b = a;
- // expected-error at -1 {{conversion from pointer to member of class 'dr480::A' to pointer to member of class 'dr480::D' via virtual base 'dr480::B' is not allowed}}
+ // expected-error at -1 {{conversion from pointer to member of class 'cwg480::A' to pointer to member of class 'cwg480::D' via virtual base 'cwg480::B' is not allowed}}
extern int D::*c;
int A::*d = static_cast<int A::*>(c);
- // expected-error at -1 {{conversion from pointer to member of class 'dr480::D' to pointer to member of class 'dr480::A' via virtual base 'dr480::B' is not allowed}}
+ // expected-error at -1 {{conversion from pointer to member of class 'cwg480::D' to pointer to member of class 'cwg480::A' via virtual base 'cwg480::B' is not allowed}}
D *e;
A *f = e;
D *g = static_cast<D*>(f);
- // expected-error at -1 {{cannot cast 'dr480::A *' to 'D *' via virtual base 'dr480::B'}}
+ // expected-error at -1 {{cannot cast 'cwg480::A *' to 'D *' via virtual base 'cwg480::B'}}
extern D &i;
A &j = i;
D &k = static_cast<D&>(j);
- // expected-error at -1 {{cannot cast 'A' to 'D &' via virtual base 'dr480::B'}}
+ // expected-error at -1 {{cannot cast 'A' to 'D &' via virtual base 'cwg480::B'}}
}
-namespace dr481 { // dr481: 2.8
+namespace cwg481 { // cwg481: 2.8
template<class T, T U> class A { T *x; };
T *x;
// expected-error at -1 {{unknown type name 'T'}}
@@ -1199,15 +1199,15 @@ namespace dr481 { // dr481: 2.8
template<typename A = C, typename C = A> struct E {
void f() {
- typedef ::dr481::C c; // #dr481-c
+ typedef ::cwg481::C c; // #cwg481-c
typedef C c;
- // expected-error at -1 {{typedef redefinition with
diff erent types ('int' vs '::dr481::C')}}
- // expected-note@#dr481-E-int {{in instantiation of member function 'dr481::E<int>::f' requested here}}
- // expected-note@#dr481-c {{previous definition is here}}
+ // expected-error at -1 {{typedef redefinition with
diff erent types ('int' vs '::cwg481::C')}}
+ // expected-note@#cwg481-E-int {{in instantiation of member function 'cwg481::E<int>::f' requested here}}
+ // expected-note@#cwg481-c {{previous definition is here}}
}
};
template struct E<>; // ok
- template struct E<int>; // #dr481-E-int
+ template struct E<int>; // #cwg481-E-int
template<template<typename U_no_typo_correction> class A,
A<int> *B,
@@ -1229,13 +1229,13 @@ namespace dr481 { // dr481: 2.8
I<123, char*, J> *j;
}
-namespace dr482 { // dr482: 3.5
+namespace cwg482 { // cwg482: 3.5
extern int a;
void f();
- int dr482::a = 0;
+ int cwg482::a = 0;
// expected-warning at -1 {{extra qualification on member 'a'}}
- void dr482::f() {}
+ void cwg482::f() {}
// expected-warning at -1 {{extra qualification on member 'f'}}
inline namespace X {
@@ -1244,19 +1244,19 @@ namespace dr482 { // dr482: 3.5
void g();
struct S;
}
- int dr482::b = 0;
+ int cwg482::b = 0;
// expected-warning at -1 {{extra qualification on member 'b'}}
- void dr482::g() {}
+ void cwg482::g() {}
// expected-warning at -1 {{extra qualification on member 'g'}}
- struct dr482::S {};
+ struct cwg482::S {};
// expected-warning at -1 {{extra qualification on member 'S'}}
- void dr482::f();
+ void cwg482::f();
// expected-warning at -1 {{extra qualification on member 'f'}}
- void dr482::g();
+ void cwg482::g();
// expected-warning at -1 {{extra qualification on member 'g'}}
- // FIXME: The following are valid in DR482's wording, but these are bugs in
+ // FIXME: The following are valid in CWG482's wording, but these are bugs in
// the wording which we deliberately don't implement.
namespace N { typedef int type; }
typedef int N::type;
@@ -1274,7 +1274,7 @@ namespace dr482 { // dr482: 3.5
};
}
-namespace dr483 { // dr483: yes
+namespace cwg483 { // cwg483: yes
namespace climits {
int check1[__SCHAR_MAX__ >= 127 ? 1 : -1];
int check2[__SHRT_MAX__ >= 32767 ? 1 : -1];
@@ -1293,7 +1293,7 @@ namespace dr483 { // dr483: yes
}
}
-namespace dr484 { // dr484: yes
+namespace cwg484 { // cwg484: yes
struct A {
A();
void f();
@@ -1312,18 +1312,18 @@ namespace dr484 { // dr484: yes
};
struct C;
- typedef C CT; // #dr484-typedef-CT
+ typedef C CT; // #cwg484-typedef-CT
struct CT {};
// expected-error at -1 {{definition of type 'CT' conflicts with typedef of the same name}}
- // expected-note@#dr484-typedef-CT {{'CT' declared here}}
+ // expected-note@#cwg484-typedef-CT {{'CT' declared here}}
namespace N {
struct D;
- typedef D DT; // #dr484-typedef-DT
+ typedef D DT; // #cwg484-typedef-DT
}
struct N::DT {};
// expected-error at -1 {{definition of type 'DT' conflicts with typedef of the same name}}
- // expected-note@#dr484-typedef-DT {{'DT' declared here}}
+ // expected-note@#cwg484-typedef-DT {{'DT' declared here}}
typedef struct {
S();
@@ -1331,7 +1331,7 @@ namespace dr484 { // dr484: yes
} S;
}
-namespace dr485 { // dr485: yes
+namespace cwg485 { // cwg485: yes
namespace N {
struct S {};
int operator+(S, S);
@@ -1344,8 +1344,8 @@ namespace dr485 { // dr485: yes
int b = f<int>(s);
}
-namespace dr486 { // dr486: yes
- template<typename T> T f(T *); // #dr486-f
+namespace cwg486 { // cwg486: yes
+ template<typename T> T f(T *); // #cwg486-f
int &f(...);
void g();
@@ -1356,24 +1356,24 @@ namespace dr486 { // dr486: yes
int &b = f(&n);
f<void()>(&g);
// expected-error at -1 {{no matching function for call to 'f'}}
- // expected-note@#dr486-f {{candidate template ignored: substitution failure [with T = void ()]: function cannot return function type 'void ()'}}
+ // expected-note@#cwg486-f {{candidate template ignored: substitution failure [with T = void ()]: function cannot return function type 'void ()'}}
f<int[10]>(&n);
// expected-error at -1 {{no matching function for call to 'f'}}
- // expected-note@#dr486-f {{candidate template ignored: substitution failure [with T = int[10]]: function cannot return array type 'int[10]'}}
+ // expected-note@#cwg486-f {{candidate template ignored: substitution failure [with T = int[10]]: function cannot return array type 'int[10]'}}
}
}
-namespace dr487 { // dr487: yes
+namespace cwg487 { // cwg487: yes
enum E { e };
- int operator+(int, E); // #dr487-operator-plus
- int i[4 + e]; // #dr487-i
+ int operator+(int, E); // #cwg487-operator-plus
+ int i[4 + e]; // #cwg487-i
// expected-error at -1 {{variable length arrays in C++ are a Clang extension}}
// since-cxx11-note at -2 {{non-constexpr function 'operator+' cannot be used in a constant expression}}
- // since-cxx11-note@#dr487-operator-plus {{declared here}}
- // expected-error@#dr487-i {{variable length array declaration not allowed at file scope}}
+ // since-cxx11-note@#cwg487-operator-plus {{declared here}}
+ // expected-error@#cwg487-i {{variable length array declaration not allowed at file scope}}
}
-namespace dr488 { // dr488: yes c++11
+namespace cwg488 { // cwg488: yes c++11
template <typename T> void f(T);
void f(int);
void g() {
@@ -1387,19 +1387,19 @@ namespace dr488 { // dr488: yes c++11
}
}
-// dr489: na
+// cwg489: na
-namespace dr490 { // dr490: 2.8
+namespace cwg490 { // cwg490: 2.8
template<typename T> struct X {};
struct A {
typedef int T;
- struct K {}; // #dr490-k
+ struct K {}; // #cwg490-k
int f(T);
int g(T);
int h(X<T>);
- int X<T>::*i(); // #dr490-i
+ int X<T>::*i(); // #cwg490-i
int K::*j();
template<typename T> T k();
@@ -1417,11 +1417,11 @@ namespace dr490 { // dr490: 2.8
// FIXME: Per this DR, these two are valid! That is another defect
// (no number yet...) which will eventually supersede this one.
friend int X<T>::*A::i();
- // expected-error at -1 {{return type of out-of-line definition of 'dr490::A::i'
diff ers from that in the declaration}}
- // expected-note@#dr490-i {{previous declaration is here}}
+ // expected-error at -1 {{return type of out-of-line definition of 'cwg490::A::i'
diff ers from that in the declaration}}
+ // expected-note@#cwg490-i {{previous declaration is here}}
friend int K::*A::j();
// expected-error at -1 {{use of undeclared identifier 'K'; did you mean 'A::K'?}}
- // expected-note@#dr490-k {{'A::K' declared here}}
+ // expected-note@#cwg490-k {{'A::K' declared here}}
// ok, lookup finds B::T, not A::T, so return type matches
friend char A::k<T>();
@@ -1433,15 +1433,15 @@ namespace dr490 { // dr490: 2.8
};
}
-namespace dr491 { // dr491: dup 413
+namespace cwg491 { // cwg491: dup 413
struct A {} a, b[3] = { a, {} };
A c[2] = { a, {}, b[1] };
// expected-error at -1 {{excess elements in array initializer}}
}
-// dr492 is in dr492.cpp
+// cwg492 is in cwg492.cpp
-namespace dr493 { // dr493: dup 976
+namespace cwg493 { // cwg493: dup 976
struct X {
template <class T> operator const T &() const;
};
@@ -1451,7 +1451,7 @@ namespace dr493 { // dr493: dup 976
}
}
-namespace dr494 { // dr494: dup 372
+namespace cwg494 { // cwg494: dup 372
class A {
class B {};
friend class C;
@@ -1464,7 +1464,7 @@ namespace dr494 { // dr494: dup 372
};
}
-namespace dr495 { // dr495: 3.5
+namespace cwg495 { // cwg495: 3.5
template<typename T>
struct S {
operator int() { return T::error; }
@@ -1482,11 +1482,11 @@ namespace dr495 { // dr495: 3.5
long n2 = s2;
}
-namespace dr496 { // dr496: sup 2094
+namespace cwg496 { // cwg496: sup 2094
struct A { int n; };
struct B { volatile int n; };
int check1[ __is_trivially_copyable(const int) ? 1 : -1];
- // This checks the dr2094 behavior, not dr496
+ // This checks the cwg2094 behavior, not cwg496
int check2[ __is_trivially_copyable(volatile int) ? 1 : -1];
int check3[ __is_trivially_constructible(A, const A&) ? 1 : -1];
int check4[ __is_trivially_constructible(B, const B&) ? 1 : -1];
@@ -1494,7 +1494,7 @@ namespace dr496 { // dr496: sup 2094
int check6[ __is_trivially_assignable(B, const B&) ? 1 : -1];
}
-namespace dr497 { // dr497: sup 253
+namespace cwg497 { // cwg497: sup 253
void before() {
struct S {
mutable int i;
@@ -1517,7 +1517,7 @@ namespace dr497 { // dr497: sup 253
}
}
-namespace dr499 { // dr499: yes
+namespace cwg499 { // cwg499: yes
extern char str[];
void f() { throw str; }
}
diff --git a/clang/test/CXX/drs/dr5xx.cpp b/clang/test/CXX/drs/dr5xx.cpp
index d473f4827455cf..0fe64102d70b00 100644
--- a/clang/test/CXX/drs/dr5xx.cpp
+++ b/clang/test/CXX/drs/dr5xx.cpp
@@ -9,20 +9,20 @@
// pointing at the implicit operator new. We can't match such a diagnostic
// with -verify.
__extension__ typedef __SIZE_TYPE__ size_t;
-void *operator new(size_t); // #dr5xx-global-operator-new
+void *operator new(size_t); // #cwg5xx-global-operator-new
// cxx98-error at -1 {{'operator new' is missing exception specification 'throw(std::bad_alloc)'}}
#if __cplusplus > 201402L
namespace std {
enum class align_val_t : size_t {};
}
-void *operator new(size_t, std::align_val_t); // #dr5xx-global-operator-new-aligned
+void *operator new(size_t, std::align_val_t); // #cwg5xx-global-operator-new-aligned
#endif
namespace std {
struct type_info;
}
-namespace dr500 { // dr500: dup 372
+namespace cwg500 { // cwg500: dup 372
class D;
class A {
class B;
@@ -34,7 +34,7 @@ namespace dr500 { // dr500: dup 372
class D : public A::B {};
}
-namespace dr501 { // dr501: yes
+namespace cwg501 { // cwg501: yes
struct A {
friend void f() {}
void g() {
@@ -44,7 +44,7 @@ namespace dr501 { // dr501: yes
};
}
-namespace dr502 { // dr502: yes
+namespace cwg502 { // cwg502: yes
struct Q {};
template<typename T> struct A {
enum E { e = 1 };
@@ -59,7 +59,7 @@ namespace dr502 { // dr502: yes
template struct A<int>;
}
-namespace dr505 { // dr505: yes
+namespace cwg505 { // cwg505: yes
const char *exts = "\e\(\{\[\%";
// expected-error at -1 {{use of non-standard escape character '\e'}}
// expected-error at -2 {{use of non-standard escape character '\('}}
@@ -70,7 +70,7 @@ namespace dr505 { // dr505: yes
// expected-error at -1 {{unknown escape sequence '\Q'}}
}
-namespace dr506 { // dr506: yes
+namespace cwg506 { // cwg506: yes
struct NonPod { ~NonPod(); };
void f(...);
void g(NonPod np) { f(np); }
@@ -78,33 +78,33 @@ namespace dr506 { // dr506: yes
// since-cxx11-error at -2 {{cannot pass object of non-trivial type 'NonPod' through variadic function; call will abort at runtime}}
}
-// FIXME: Add tests here once DR260 is resolved.
-// dr507: dup 260
+// FIXME: Add tests here once CWG260 is resolved.
+// cwg507: dup 260
-// dr508: na
-// dr509: na
-// dr510: na
+// cwg508: na
+// cwg509: na
+// cwg510: na
-namespace dr512 { // dr512: yes
- struct A { // #dr512-A
- A(int); // #dr512-A-ctor
+namespace cwg512 { // cwg512: yes
+ struct A { // #cwg512-A
+ A(int); // #cwg512-A-ctor
};
union U { A a; };
// cxx98-error at -1 {{union member 'a' has a non-trivial default constructor}}
- // cxx98-note@#dr512-A {{because type 'dr512::A' has no default constructor}}
- // cxx98-note@#dr512-A-ctor {{implicit default constructor suppressed by user-declared constructor}}
+ // cxx98-note@#cwg512-A {{because type 'cwg512::A' has no default constructor}}
+ // cxx98-note@#cwg512-A-ctor {{implicit default constructor suppressed by user-declared constructor}}
}
-// dr513: na
+// cwg513: na
-namespace dr514 { // dr514: yes
+namespace cwg514 { // cwg514: yes
namespace A { extern int x, y; }
int A::x = y;
}
-namespace dr515 { // dr515: sup 1017
- // FIXME: dr1017 reverses the wording of dr515, but the current draft has
- // dr515's wording, with a
diff erent fix for dr1017.
+namespace cwg515 { // cwg515: sup 1017
+ // FIXME: cwg1017 reverses the wording of cwg515, but the current draft has
+ // cwg515's wording, with a
diff erent fix for cwg1017.
struct X { int n; };
template<typename T> struct Y : T {
@@ -117,9 +117,9 @@ namespace dr515 { // dr515: sup 1017
// cxx98-error at -1 {{invalid use of non-static data member 'a'}}
}
-// dr516: na
+// cwg516: na
-namespace dr517 { // dr517: no
+namespace cwg517 { // cwg517: no
// This is NDR, but we should diagnose it anyway.
template<typename T> struct S {};
template<typename T> int v = 0;
@@ -140,25 +140,25 @@ namespace dr517 { // dr517: no
template<typename T> int v<T&> = 0;
}
-namespace dr518 { // dr518: yes c++11
+namespace cwg518 { // cwg518: yes c++11
enum E { e, };
// cxx98-error at -1 {{commas at the end of enumerator lists are a C++11 extension}}
}
-// dr519 is in dr519.cpp
-// dr520: na
+// cwg519 is in cwg519.cpp
+// cwg520: na
-// dr521: no
+// cwg521: no
// FIXME: The wording here is broken. It's not reasonable to expect a
// diagnostic here. Once the relevant DR gets a number, mark this as a dup.
-namespace dr522 { // dr522: yes
+namespace cwg522 { // cwg522: yes
struct S {};
template<typename T> void b1(volatile T &);
template<typename T> void b2(volatile T * const *);
template<typename T> void b2(volatile T * const S::*);
template<typename T> void b2(volatile T * const S::* const *);
- template<typename T> void b2a(volatile T *S::* const *); // #dr522-b2a
+ template<typename T> void b2a(volatile T *S::* const *); // #cwg522-b2a
template<typename T> struct Base {};
struct Derived : Base<int> {};
@@ -178,28 +178,28 @@ namespace dr522 { // dr522: yes
b2(am);
b2a(am);
// expected-error at -1 {{no matching function for call to 'b2a'}}
- // expected-note@#dr522-b2a {{candidate template ignored: deduced type 'volatile int *dr522::S::*const *' of 1st parameter does not match adjusted type 'int *dr522::S::**' of argument}}
+ // expected-note@#cwg522-b2a {{candidate template ignored: deduced type 'volatile int *cwg522::S::*const *' of 1st parameter does not match adjusted type 'int *cwg522::S::**' of argument}}
b3(d);
b3(cd);
}
}
-namespace dr524 { // dr524: yes
+namespace cwg524 { // cwg524: yes
template<typename T> void f(T a, T b) { operator+(a, b); }
// expected-error at -1 {{call to function 'operator+' that is neither visible in the template definition nor found by argument-dependent lookup}}
- // expected-note@#dr524-f-N-S {{in instantiation of function template specialization 'dr524::f<dr524::N::S>' requested here}}
- // expected-note@#dr524-operator-plus {{'operator+' should be declared prior to the call site or in namespace 'dr524::N'}}
+ // expected-note@#cwg524-f-N-S {{in instantiation of function template specialization 'cwg524::f<cwg524::N::S>' requested here}}
+ // expected-note@#cwg524-operator-plus {{'operator+' should be declared prior to the call site or in namespace 'cwg524::N'}}
struct S {};
void operator+(S, S);
template void f(S, S);
namespace N { struct S {}; }
- void operator+(N::S, N::S); // #dr524-operator-plus
- template void f(N::S, N::S); // #dr524-f-N-S
+ void operator+(N::S, N::S); // #cwg524-operator-plus
+ template void f(N::S, N::S); // #cwg524-f-N-S
}
-namespace dr525 { // dr525: yes
+namespace cwg525 { // cwg525: yes
namespace before {
// Note, the example was correct prior to the change; instantiation is
// required for cases like this:
@@ -211,37 +211,37 @@ namespace dr525 { // dr525: yes
namespace after {
template <class T> struct D { typename T::error e; };
// expected-error at -1 {{type 'double' cannot be used prior to '::' because it has no members}}
- // expected-note@#dr525-ppp {{in instantiation of template class 'dr525::after::D<double>' requested here}}
+ // expected-note@#cwg525-ppp {{in instantiation of template class 'cwg525::after::D<double>' requested here}}
void g(D<double> *ppp) {
- delete ppp; // #dr525-ppp
+ delete ppp; // #cwg525-ppp
}
}
}
-namespace dr526 { // dr526: yes
+namespace cwg526 { // cwg526: yes
template<int> struct S {};
template<int N> void f1(S<N> s);
- template<int N> void f2(S<(N)> s); // #dr526-f2
- template<int N> void f3(S<+N> s); // #dr526-f3
+ template<int N> void f2(S<(N)> s); // #cwg526-f2
+ template<int N> void f3(S<+N> s); // #cwg526-f3
template<int N> void g1(int (&)[N]);
- template<int N> void g2(int (&)[(N)]); // #dr526-g2
- template<int N> void g3(int (&)[+N]); // #dr526-g3
+ template<int N> void g2(int (&)[(N)]); // #cwg526-g2
+ template<int N> void g3(int (&)[+N]); // #cwg526-g3
void test(int (&a)[3], S<3> s) {
f1(s);
f2(s);
// expected-error at -1 {{no matching function for call to 'f2'}}
- // expected-note@#dr526-f2 {{candidate template ignored: couldn't infer template argument 'N'}}
+ // expected-note@#cwg526-f2 {{candidate template ignored: couldn't infer template argument 'N'}}
f3(s);
// expected-error at -1 {{no matching function for call to 'f3'}}
- // expected-note@#dr526-f3 {{candidate template ignored: couldn't infer template argument 'N'}}
+ // expected-note@#cwg526-f3 {{candidate template ignored: couldn't infer template argument 'N'}}
g1(a);
g2(a);
// expected-error at -1 {{no matching function for call to 'g2'}}
- // expected-note@#dr526-g2 {{candidate template ignored: couldn't infer template argument 'N'}}
+ // expected-note@#cwg526-g2 {{candidate template ignored: couldn't infer template argument 'N'}}
g3(a);
// expected-error at -1 {{no matching function for call to 'g3'}}
- // expected-note@#dr526-g3 {{candidate template ignored: couldn't infer template argument 'N'}}
+ // expected-note@#cwg526-g3 {{candidate template ignored: couldn't infer template argument 'N'}}
}
template<int N> struct X {
@@ -254,34 +254,34 @@ namespace dr526 { // dr526: yes
};
}
-namespace dr527 { // dr527: na
+namespace cwg527 { // cwg527: na
// This DR is meaningless. It removes a required diagnostic from the case
// where a not-externally-visible object is odr-used but not defined, which
// requires a diagnostic for a
diff erent reason.
- extern struct { int x; } a; // FIXME: We should reject this, per dr389.
+ extern struct { int x; } a; // FIXME: We should reject this, per cwg389.
static struct { int x; } b;
extern "C" struct { int x; } c;
namespace { extern struct { int x; } d; }
typedef struct { int x; } *P;
- struct E { static P e; }; // FIXME: We should reject this, per dr389.
+ struct E { static P e; }; // FIXME: We should reject this, per cwg389.
namespace { struct F { static P f; }; }
int ax = a.x, bx = b.x, cx = c.x, dx = d.x, ex = E::e->x, fx = F::f->x;
}
-namespace dr528 { // dr528: 2.7
+namespace cwg528 { // cwg528: 2.7
-struct S; // #dr528-S
+struct S; // #cwg528-S
void f() {
typeid(S);
// expected-error at -1 {{'typeid' of incomplete type 'S'}}
- // expected-note@#dr528-S {{forward declaration of 'dr528::S'}}
+ // expected-note@#cwg528-S {{forward declaration of 'cwg528::S'}}
}
-} // namespace dr528
+} // namespace cwg528
-namespace dr530 { // dr530: yes
+namespace cwg530 { // cwg530: yes
template<int*> struct S { enum { N = 1 }; };
template<void(*)()> struct T { enum { N = 1 }; };
int n;
@@ -290,7 +290,7 @@ namespace dr530 { // dr530: yes
int b[T<&f>::N];
}
-namespace dr531 { // dr531: partial
+namespace cwg531 { // cwg531: partial
namespace good {
template<typename T> struct A {
void f(T) { T::error; }
@@ -334,7 +334,7 @@ namespace dr531 { // dr531: partial
void f(T) { T::error; }
template<typename U> void g(T, U) { T::error; }
struct B { typename T::error error; };
- template<typename U> struct C { typename T::error error; }; // #dr531-C
+ template<typename U> struct C { typename T::error error; }; // #cwg531-C
static T n;
};
template<typename T> T A<T>::n = T::error;
@@ -342,20 +342,20 @@ namespace dr531 { // dr531: partial
void A<int>::f(int) {}
// expected-error at -1 {{template specialization requires 'template<>'}}
template<typename U> void A<int>::g(int, U) {}
- // expected-error at -1 {{template parameter list matching the non-templated nested type 'dr531::bad::A<int>' should be empty}}
+ // expected-error at -1 {{template parameter list matching the non-templated nested type 'cwg531::bad::A<int>' should be empty}}
struct A<int>::B {};
// expected-error at -1 {{template specialization requires 'template<>'}}
template<typename U> struct A<int>::C {};
- // expected-error at -1 {{template parameter list matching the non-templated nested type 'dr531::bad::A<int>' should be empty}}
+ // expected-error at -1 {{template parameter list matching the non-templated nested type 'cwg531::bad::A<int>' should be empty}}
// expected-error at -2 {{redefinition of 'C' as
diff erent kind of symbol}}
- // expected-note@#dr531-C {{previous definition is here}}
+ // expected-note@#cwg531-C {{previous definition is here}}
int A<int>::n = 0;
// expected-error at -1 {{template specialization requires 'template<>'}}
- template<> struct A<char> { // #dr531-A-char
+ template<> struct A<char> { // #cwg531-A-char
void f(char);
template<typename U> void g(char, U);
- struct B; // #dr531-B
+ struct B; // #cwg531-B
template<typename U> struct C;
static char n;
};
@@ -364,14 +364,14 @@ namespace dr531 { // dr531: partial
// expected-error at -1 {{no function template matches function template specialization 'f'}}
template<> template<typename U> void A<char>::g(char, U) {}
// expected-error at -1 {{extraneous template parameter list in template specialization}}
- // expected-note@#dr531-A-char {{'template<>' header not required for explicitly-specialized class 'dr531::bad::A<char>' declared here}}
+ // expected-note@#cwg531-A-char {{'template<>' header not required for explicitly-specialized class 'cwg531::bad::A<char>' declared here}}
template<> struct A<char>::B {};
// expected-error at -1 {{extraneous 'template<>' in declaration of struct 'B'}}
- // expected-error at -2 {{specialization of member 'dr531::bad::A<char>::B' does not specialize an instantiated member}}
- // expected-note@#dr531-B {{attempt to specialize declaration here}}
+ // expected-error at -2 {{specialization of member 'cwg531::bad::A<char>::B' does not specialize an instantiated member}}
+ // expected-note@#cwg531-B {{attempt to specialize declaration here}}
template<> template<typename U> struct A<char>::C {};
// expected-error at -1 {{extraneous template parameter list in template specialization}}
- // expected-note@#dr531-A-char {{'template<>' header not required for explicitly-specialized class 'dr531::bad::A<char>' declared here}}
+ // expected-note@#cwg531-A-char {{'template<>' header not required for explicitly-specialized class 'cwg531::bad::A<char>' declared here}}
template<> char A<char>::n = 0;
// expected-error at -1 {{extraneous 'template<>' in declaration of variable 'n'}}
}
@@ -388,11 +388,11 @@ namespace dr531 { // dr531: partial
};
template<> template<typename U> void A<int>::B<U>::f() {}
template<typename U> void A<int>::B<U>::g() {}
- // expected-error at -1 {{template parameter list matching the non-templated nested type 'dr531::nested::A<int>' should be empty ('template<>')}}
+ // expected-error at -1 {{template parameter list matching the non-templated nested type 'cwg531::nested::A<int>' should be empty ('template<>')}}
template<> template<typename U> template<typename V> void A<int>::B<U>::h() {}
template<typename U> template<typename V> void A<int>::B<U>::i() {}
- // expected-error at -1 {{template parameter list matching the non-templated nested type 'dr531::nested::A<int>' should be empty ('template<>')}}
+ // expected-error at -1 {{template parameter list matching the non-templated nested type 'cwg531::nested::A<int>' should be empty ('template<>')}}
#if __cplusplus <= 201703L
// FIXME: All of those declarations shouldn't crash in C++20 mode.
@@ -403,13 +403,13 @@ namespace dr531 { // dr531: partial
template<> void A<int>::B<char>::f() {}
// cxx98-17-error at -1 {{template specialization requires 'template<>'}}
template<> template<typename V> void A<int>::B<char>::h() {}
- // cxx98-17-error at -1 {{template parameter list matching the non-templated nested type 'dr531::nested::A<int>::B<char>' should be empty ('template<>')}}
+ // cxx98-17-error at -1 {{template parameter list matching the non-templated nested type 'cwg531::nested::A<int>::B<char>' should be empty ('template<>')}}
#endif
}
}
// PR8130
-namespace dr532 { // dr532: 3.5
+namespace cwg532 { // cwg532: 3.5
struct A { };
template<class T> struct B {
@@ -424,16 +424,16 @@ namespace dr532 { // dr532: 3.5
}
}
-// dr533: na
+// cwg533: na
-namespace dr534 { // dr534: 2.9
+namespace cwg534 { // cwg534: 2.9
struct S {};
template<typename T> void operator+(S, T);
template<typename T> void operator+<T*>(S, T*) {}
// expected-error at -1 {{function template partial specialization is not allowed}}
}
-namespace dr535 { // dr535: yes
+namespace cwg535 { // cwg535: yes
class X { private: X(const X&); };
struct A {
X x;
@@ -464,12 +464,12 @@ namespace dr535 { // dr535: yes
#endif
}
-// dr536: na
-// dr537: na
-// dr538: na
+// cwg536: na
+// cwg537: na
+// cwg538: na
-// dr539: yes
-const dr539(
+// cwg539: yes
+const cwg539(
// expected-error at -1 {{a type specifier is required for all declarations}}
const a) {
// expected-error at -1 {{unknown type name 'a'}}
@@ -521,21 +521,21 @@ const dr539(
#endif
}
-namespace dr540 { // dr540: yes
+namespace cwg540 { // cwg540: yes
typedef int &a;
typedef const a &a;
// expected-warning at -1 {{'const' qualifier on reference type 'a' (aka 'int &') has no effect}}
typedef const int &b;
typedef b &b;
- typedef const a &c; // #dr540-typedef-a-c
+ typedef const a &c; // #cwg540-typedef-a-c
// expected-warning at -1 {{'const' qualifier on reference type 'a' (aka 'int &') has no effect}}
- typedef const b &c; // #dr540-typedef-b-c
- // expected-error@#dr540-typedef-b-c {{typedef redefinition with
diff erent types ('const int &' vs 'int &')}}
- // expected-note@#dr540-typedef-a-c {{previous definition is here}}
- // expected-warning@#dr540-typedef-b-c {{'const' qualifier on reference type 'b' (aka 'const int &') has no effect}}
+ typedef const b &c; // #cwg540-typedef-b-c
+ // expected-error@#cwg540-typedef-b-c {{typedef redefinition with
diff erent types ('const int &' vs 'int &')}}
+ // expected-note@#cwg540-typedef-a-c {{previous definition is here}}
+ // expected-warning@#cwg540-typedef-b-c {{'const' qualifier on reference type 'b' (aka 'const int &') has no effect}}
}
-namespace dr541 { // dr541: yes
+namespace cwg541 { // cwg541: yes
template<int> struct X { typedef int type; };
template<typename T> struct S {
int f(T);
@@ -565,45 +565,45 @@ namespace dr541 { // dr541: yes
};
}
-namespace dr542 { // dr542: yes
+namespace cwg542 { // cwg542: yes
#if __cplusplus >= 201103L
// In C++20 A and B are no longer aggregates and thus the constructor is
// called, which fails.
- struct A { A() = delete; int n; }; // #dr542-A
+ struct A { A() = delete; int n; }; // #cwg542-A
// ok, constructor not called
- A a[32] = {}; // #dr542-a
+ A a[32] = {}; // #cwg542-a
// since-cxx20-error at -1 {{call to deleted constructor of 'A'}}
- // since-cxx20-note@#dr542-A {{'A' has been explicitly marked deleted here}}
- // since-cxx20-note@#dr542-a {{in implicit initialization of array element 0 with omitted initializer}}
+ // since-cxx20-note@#cwg542-A {{'A' has been explicitly marked deleted here}}
+ // since-cxx20-note@#cwg542-a {{in implicit initialization of array element 0 with omitted initializer}}
struct B {
int n;
private:
- B() = default; // #dr542-B-ctor
+ B() = default; // #cwg542-B-ctor
};
B b[32] = {}; // ok, constructor not called
- // since-cxx20-error at -1 {{calling a private constructor of class 'dr542::B'}}
- // since-cxx20-note@#dr542-B-ctor {{declared private here}}
+ // since-cxx20-error at -1 {{calling a private constructor of class 'cwg542::B'}}
+ // since-cxx20-note@#cwg542-B-ctor {{declared private here}}
#endif
}
-namespace dr543 { // dr543: 3.0
- // In C++98+DR543, this is valid because value-initialization doesn't call a
+namespace cwg543 { // cwg543: 3.0
+ // In C++98+CWG543, this is valid because value-initialization doesn't call a
// trivial default constructor, so we never notice that defining the
// constructor would be ill-formed.
//
- // In C++11+DR543, this is ill-formed, because the default constructor is
+ // In C++11+CWG543, this is ill-formed, because the default constructor is
// deleted, and value-initialization *does* call a deleted default
// constructor, even if it is trivial.
struct A {
- const int n; // #dr543-A-n
+ const int n; // #cwg543-A-n
};
A a = A();
// since-cxx11-error at -1 {{call to implicitly-deleted default constructor of 'A'}}
- // since-cxx11-note@#dr543-A-n {{default constructor of 'A' is implicitly deleted because field 'n' of const-qualified type 'const int' would not be initialized}}
+ // since-cxx11-note@#cwg543-A-n {{default constructor of 'A' is implicitly deleted because field 'n' of const-qualified type 'const int' would not be initialized}}
}
-namespace dr544 { // dr544: yes
+namespace cwg544 { // cwg544: yes
int *n;
template<class T> struct A { int n; };
@@ -612,13 +612,13 @@ namespace dr544 { // dr544: yes
int k = B<int>().get();
}
-namespace dr546 { // dr546: yes
+namespace cwg546 { // cwg546: yes
template<typename T> struct A { void f(); };
template struct A<int>;
template<typename T> void A<T>::f() { T::error; }
}
-namespace dr547 { // dr547: 3.2
+namespace cwg547 { // cwg547: 3.2
template<typename T> struct X;
template<typename T> struct X<T() const> {};
template<typename T, typename C> X<T> f(T C::*) { return X<T>(); }
@@ -627,16 +627,16 @@ namespace dr547 { // dr547: 3.2
X<void() const> x = f(&S::f);
}
-namespace dr548 { // dr548: dup 482
+namespace cwg548 { // cwg548: dup 482
template<typename T> struct S {};
template<typename T> void f() {}
- template struct dr548::S<int>;
- template void dr548::f<int>();
+ template struct cwg548::S<int>;
+ template void cwg548::f<int>();
}
-// dr550: dup 393
+// cwg550: dup 393
-namespace dr551 { // dr551: yes c++11
+namespace cwg551 { // cwg551: yes c++11
// FIXME: This obviously should apply in C++98 mode too.
template<typename T> void f() {}
template inline void f<int>();
@@ -653,25 +653,25 @@ namespace dr551 { // dr551: yes c++11
// since-cxx11-error at -1 {{explicit instantiation cannot be 'inline'}}
}
-namespace dr552 { // dr552: yes
+namespace cwg552 { // cwg552: yes
template<typename T, typename T::U> struct X {};
struct Y { typedef int U; };
X<Y, 0> x;
}
-// dr553: 2.7
-struct dr553_class {
- friend void *operator new(size_t, dr553_class);
+// cwg553: 2.7
+struct cwg553_class {
+ friend void *operator new(size_t, cwg553_class);
};
-namespace dr553 {
- dr553_class c;
+namespace cwg553 {
+ cwg553_class c;
// Contrary to the apparent intention of the DR, operator new is not actually
// looked up with a lookup mechanism that performs ADL; the standard says it
// "is looked up in global scope", where it is not visible.
void *p = new (c) int;
// expected-error at -1 {{no matching function for call to 'operator new'}}
- // since-cxx17-note@#dr5xx-global-operator-new-aligned {{candidate function not viable: no known conversion from 'dr553_class' to 'std::align_val_t' for 2nd argument}}
- // expected-note@#dr5xx-global-operator-new {{candidate function not viable: requires 1 argument, but 2 were provided}}
+ // since-cxx17-note@#cwg5xx-global-operator-new-aligned {{candidate function not viable: no known conversion from 'cwg553_class' to 'std::align_val_t' for 2nd argument}}
+ // expected-note@#cwg5xx-global-operator-new {{candidate function not viable: requires 1 argument, but 2 were provided}}
struct namespace_scope {
friend void *operator new(size_t, namespace_scope);
@@ -679,9 +679,9 @@ namespace dr553 {
};
}
-// dr554: na
+// cwg554: na
-namespace dr555 { // dr555: 2.8
+namespace cwg555 { // cwg555: 2.8
typedef int I;
typedef const int CI;
typedef volatile int VI;
@@ -734,11 +734,11 @@ void g(int &a, CI &b, VI &c) {
c.CI::~CI();
c.VI::~VI();
}
-} // namespace dr555
+} // namespace cwg555
-// dr556: na
+// cwg556: na
-namespace dr557 { // dr557: 3.1
+namespace cwg557 { // cwg557: 3.1
template<typename T> struct S {
friend void f(S<T> *);
friend void g(S<S<T> > *);
@@ -749,7 +749,7 @@ namespace dr557 { // dr557: 3.1
}
}
-namespace dr558 { // dr558: 2.9
+namespace cwg558 { // cwg558: 2.9
wchar_t a = L'\uD7FF';
wchar_t b = L'\xD7FF';
wchar_t c = L'\uD800';
@@ -762,9 +762,9 @@ namespace dr558 { // dr558: 2.9
wchar_t h = L'\xE000';
}
-template<typename> struct dr559 { typedef int T; dr559::T u; }; // dr559: yes
+template<typename> struct cwg559 { typedef int T; cwg559::T u; }; // cwg559: yes
-namespace dr560 { // dr560: 16
+namespace cwg560 { // cwg560: 16
template <class T>
struct Outer {
@@ -776,9 +776,9 @@ template <class T>
Outer<T>::Inner* Outer<T>::Inner::self() { return this; }
// cxx98-17-error at -1 {{missing 'typename' prior to dependent type name Outer<T>::Inner; implicit 'typename' is a C++20 extension}}
-} // namespace dr560
+} // namespace cwg560
-namespace dr561 { // dr561: yes
+namespace cwg561 { // cwg561: yes
template<typename T> void f(int);
template<typename T> void g(T t) {
f<T>(t);
@@ -792,20 +792,20 @@ namespace dr561 { // dr561: yes
}
}
-// dr562: na
+// cwg562: na
-namespace dr564 { // dr564: yes
+namespace cwg564 { // cwg564: yes
extern "C++" void f(int);
void f(int); // ok
extern "C++" { extern int n; }
int n; // ok
}
-namespace dr565 { // dr565: yes
+namespace cwg565 { // cwg565: yes
namespace N {
- template<typename T> int f(T); // #dr565-f
+ template<typename T> int f(T); // #cwg565-f
}
- using N::f; // #dr565-using
+ using N::f; // #cwg565-using
template<typename T> int f(T*);
template<typename T> void f(T);
template<typename T, int = 0> int f(T);
@@ -813,19 +813,19 @@ namespace dr565 { // dr565: yes
template<typename T> int f(T, int = 0);
template<typename T> int f(T);
// expected-error at -1 {{declaration conflicts with target of using declaration already in scope}}
- // expected-note@#dr565-f {{target of using declaration}}
- // expected-note@#dr565-using {{using declaration}}
+ // expected-note@#cwg565-f {{target of using declaration}}
+ // expected-note@#cwg565-using {{using declaration}}
}
-namespace dr566 { // dr566: yes
+namespace cwg566 { // cwg566: yes
#if __cplusplus >= 201103L
int check[int(-3.99) == -3 ? 1 : -1];
#endif
}
-// dr567: na
+// cwg567: na
-namespace dr568 { // dr568: 3.0 c++11
+namespace cwg568 { // cwg568: 3.0 c++11
// FIXME: This is a DR issue against C++98, so should probably apply there
// too.
struct x { int y; };
@@ -860,35 +860,35 @@ namespace dr568 { // dr568: 3.0 c++11
void jump() {
goto x;
// cxx98-error at -1 {{cannot jump from this goto statement to its label}}
- // cxx98-note@#dr568-t {{jump bypasses initialization of non-POD variable}}
- trivial t; // #dr568-t
+ // cxx98-note@#cwg568-t {{jump bypasses initialization of non-POD variable}}
+ trivial t; // #cwg568-t
x: ;
}
}
-namespace dr569 { // dr569: yes c++11
+namespace cwg569 { // cwg569: yes c++11
// FIXME: This is a DR issue against C++98, so should probably apply there
// too.
;;;;;
// cxx98-error at -1 {{C++11 extension}}
}
-namespace dr570 { // dr570: dup 633
+namespace cwg570 { // cwg570: dup 633
int n;
- int &r = n; // #dr570-r
+ int &r = n; // #cwg570-r
int &r = n;
// expected-error at -1 {{redefinition of 'r'}}
- // expected-note@#dr570-r {{previous definition is here}}
+ // expected-note@#cwg570-r {{previous definition is here}}
}
-// dr571 is in dr571.cpp
+// cwg571 is in cwg571.cpp
-namespace dr572 { // dr572: yes
+namespace cwg572 { // cwg572: yes
enum E { a = 1, b = 2 };
int check[a + b == 3 ? 1 : -1];
}
-namespace dr573 { // dr573: no
+namespace cwg573 { // cwg573: no
void *a;
int *b = reinterpret_cast<int*>(a);
void (*c)() = reinterpret_cast<void(*)()>(a);
@@ -904,62 +904,62 @@ namespace dr573 { // dr573: no
template<int*> struct T;
}
-namespace dr574 { // dr574: 3.0
+namespace cwg574 { // cwg574: 3.0
struct A {
- A &operator=(const A&) const; // #dr574-A-copy-assign
+ A &operator=(const A&) const; // #cwg574-A-copy-assign
};
struct B {
- B &operator=(const B&) volatile; // #dr574-B-copy-assign
+ B &operator=(const B&) volatile; // #cwg574-B-copy-assign
};
#if __cplusplus >= 201103L
struct C {
- C &operator=(const C&) &; // #dr574-C-copy-assign
+ C &operator=(const C&) &; // #cwg574-C-copy-assign
};
struct D {
- D &operator=(const D&) &&; // #dr574-D-copy-assign
+ D &operator=(const D&) &&; // #cwg574-D-copy-assign
};
void test(C c, D d) {
c = c;
C() = c;
// since-cxx11-error at -1 {{no viable overloaded '='}}
- // since-cxx11-note@#dr574-C-copy-assign {{candidate function not viable: expects an lvalue for object argument}}
+ // since-cxx11-note@#cwg574-C-copy-assign {{candidate function not viable: expects an lvalue for object argument}}
d = d;
// since-cxx11-error at -1 {{no viable overloaded '='}}
- // since-cxx11-note@#dr574-D-copy-assign {{candidate function not viable: expects an rvalue for object argument}}
+ // since-cxx11-note@#cwg574-D-copy-assign {{candidate function not viable: expects an rvalue for object argument}}
D() = d;
}
#endif
struct Test {
friend A &A::operator=(const A&);
- // expected-error at -1 {{friend declaration of 'operator=' does not match any declaration in 'dr574::A'}}
- // expected-note@#dr574-A-copy-assign {{candidate function has
diff erent qualifiers (expected unqualified but found 'const')}}
+ // expected-error at -1 {{friend declaration of 'operator=' does not match any declaration in 'cwg574::A'}}
+ // expected-note@#cwg574-A-copy-assign {{candidate function has
diff erent qualifiers (expected unqualified but found 'const')}}
friend B &B::operator=(const B&);
- // expected-error at -1 {{friend declaration of 'operator=' does not match any declaration in 'dr574::B'}}
- // expected-note@#dr574-B-copy-assign {{candidate function has
diff erent qualifiers (expected unqualified but found 'volatile')}}
+ // expected-error at -1 {{friend declaration of 'operator=' does not match any declaration in 'cwg574::B'}}
+ // expected-note@#cwg574-B-copy-assign {{candidate function has
diff erent qualifiers (expected unqualified but found 'volatile')}}
#if __cplusplus >= 202302L
friend C &C::operator=(const C&);
// since-cxx23-error at -1 {{conflicting types for 'operator='}}
- // since-cxx23-note@#dr574-C-copy-assign {{previous declaration is here}}
+ // since-cxx23-note@#cwg574-C-copy-assign {{previous declaration is here}}
friend D &D::operator=(const D&);
// since-cxx23-error at -1 {{conflicting types for 'operator='}}
- // since-cxx23-note@#dr574-D-copy-assign {{previous declaration is here}}
+ // since-cxx23-note@#cwg574-D-copy-assign {{previous declaration is here}}
#elif __cplusplus >= 201103L
// FIXME: We shouldn't produce the 'cannot overload' diagnostics here.
- friend C &C::operator=(const C&); // #dr574-test-C
- // since-cxx11-error@#dr574-test-C {{cannot overload}}
- // since-cxx11-note@#dr574-C-copy-assign {{previous declaration is here}}
- // since-cxx11-error@#dr574-test-C {{friend declaration of 'operator=' does not match any declaration in 'dr574::C'}}
- // since-cxx11-note@#dr574-C-copy-assign {{candidate function}}
- friend D &D::operator=(const D&); // #dr574-test-D
- // since-cxx11-error@#dr574-test-D {{cannot overload a member function without a ref-qualifier with a member function with ref-qualifier '&&'}}
- // since-cxx11-note@#dr574-D-copy-assign {{previous declaration is here}}
- // since-cxx11-error@#dr574-test-D {{friend declaration of 'operator=' does not match any declaration in 'dr574::D'}}
- // since-cxx11-note@#dr574-D-copy-assign {{candidate function}}
+ friend C &C::operator=(const C&); // #cwg574-test-C
+ // since-cxx11-error@#cwg574-test-C {{cannot overload}}
+ // since-cxx11-note@#cwg574-C-copy-assign {{previous declaration is here}}
+ // since-cxx11-error@#cwg574-test-C {{friend declaration of 'operator=' does not match any declaration in 'cwg574::C'}}
+ // since-cxx11-note@#cwg574-C-copy-assign {{candidate function}}
+ friend D &D::operator=(const D&); // #cwg574-test-D
+ // since-cxx11-error@#cwg574-test-D {{cannot overload a member function without a ref-qualifier with a member function with ref-qualifier '&&'}}
+ // since-cxx11-note@#cwg574-D-copy-assign {{previous declaration is here}}
+ // since-cxx11-error@#cwg574-test-D {{friend declaration of 'operator=' does not match any declaration in 'cwg574::D'}}
+ // since-cxx11-note@#cwg574-D-copy-assign {{candidate function}}
#endif
};
}
-namespace dr575 { // dr575: yes
+namespace cwg575 { // cwg575: yes
template<typename T, typename U = typename T::type> void a(T); void a(...);
// cxx98-error at -1 {{default template arguments for a function template are a C++11 extension}}
template<typename T, typename T::type U = 0> void b(T); void b(...);
@@ -968,12 +968,12 @@ namespace dr575 { // dr575: yes
// cxx98-error at -1 {{default template arguments for a function template are a C++11 extension}}
template<typename T> void d(T, int = T::value); void d(...);
// expected-error at -1 {{type 'int' cannot be used prior to '::' because it has no members}}
- // expected-note@#dr575-d {{in instantiation of default function argument expression for 'd<int>' required here}}
+ // expected-note@#cwg575-d {{in instantiation of default function argument expression for 'd<int>' required here}}
void x() {
a(0);
b(0);
c(0);
- d(0); // #dr575-d
+ d(0); // #cwg575-d
}
template<typename T = int&> void f(T* = 0);
@@ -987,7 +987,7 @@ namespace dr575 { // dr575: yes
void *p = h((void*)0);
}
-namespace dr576 { // dr576: 3.5
+namespace cwg576 { // cwg576: 3.5
typedef void f() {}
// expected-error at -1 {{function definition declared 'typedef'}}
void f(typedef int n);
@@ -995,7 +995,7 @@ namespace dr576 { // dr576: 3.5
void f(char c) { typedef int n; }
}
-namespace dr577 { // dr577: 3.5
+namespace cwg577 { // cwg577: 3.5
typedef void V;
typedef const void CV;
void a(void);
@@ -1010,35 +1010,35 @@ namespace dr577 { // dr577: 3.5
void (*g)(V) = a;
void (*h)(CV);
// expected-error at -1 {{'void' as parameter must not have type qualifiers}}
- template<typename T> void i(T); // #dr577-i
- template<typename T> void j(void (*)(T)); // #dr577-j
+ template<typename T> void i(T); // #cwg577-i
+ template<typename T> void j(void (*)(T)); // #cwg577-j
void k() {
a();
c();
i<void>();
// expected-error at -1 {{no matching function for call to 'i'}}
- // expected-note@#dr577-i {{candidate function template not viable: requires 1 argument, but 0 were provided}}
+ // expected-note@#cwg577-i {{candidate function template not viable: requires 1 argument, but 0 were provided}}
i<const void>();
// expected-error at -1 {{no matching function for call to 'i'}}
- // expected-note@#dr577-i {{candidate function template not viable: requires 1 argument, but 0 were provided}}
+ // expected-note@#cwg577-i {{candidate function template not viable: requires 1 argument, but 0 were provided}}
j<void>(0);
// expected-error at -1 {{no matching function for call to 'j'}}
- // expected-note@#dr577-j {{candidate template ignored: substitution failure [with T = void]: argument may not have 'void' type}}
+ // expected-note@#cwg577-j {{candidate template ignored: substitution failure [with T = void]: argument may not have 'void' type}}
j<const void>(0);
// expected-error at -1 {{no matching function for call to 'j'}}
- // expected-note@#dr577-j {{candidate template ignored: substitution failure [with T = const void]: argument may not have 'void' type}}
+ // expected-note@#cwg577-j {{candidate template ignored: substitution failure [with T = const void]: argument may not have 'void' type}}
}
}
-namespace dr580 { // dr580: partial
+namespace cwg580 { // cwg580: partial
class C;
struct A { static C c; };
struct B { static C c; };
class C {
- C(); // #dr580-C-ctor
- ~C(); // #dr580-C-dtor
+ C(); // #cwg580-C-ctor
+ ~C(); // #cwg580-C-dtor
- typedef int I; // #dr580-I
+ typedef int I; // #cwg580-I
template<int> struct X;
template<int> friend struct Y;
template<int> void f();
@@ -1049,8 +1049,8 @@ namespace dr580 { // dr580: partial
template<C::I> struct C::X {};
template<C::I> struct Y {};
template<C::I> struct Z {};
- // expected-error at -1 {{'I' is a private member of 'dr580::C'}}
- // expected-note@#dr580-I {{implicitly declared private here}}
+ // expected-error at -1 {{'I' is a private member of 'cwg580::C'}}
+ // expected-note@#cwg580-I {{implicitly declared private here}}
struct C2 {
class X {
@@ -1069,20 +1069,20 @@ namespace dr580 { // dr580: partial
template<C::I> void C::f() {}
template<C::I> void g() {}
template<C::I> void h() {}
- // expected-error at -1 {{'I' is a private member of 'dr580::C'}}
- // expected-note@#dr580-I {{implicitly declared private here}}
+ // expected-error at -1 {{'I' is a private member of 'cwg580::C'}}
+ // expected-note@#cwg580-I {{implicitly declared private here}}
C A::c;
- C B::c; // #dr580-c
- // expected-error@#dr580-c {{calling a private constructor of class 'dr580::C'}}
- // expected-note@#dr580-C-ctor {{implicitly declared private here}}
- // expected-error@#dr580-c {{variable of type 'C' has private destructor}}
- // expected-note@#dr580-C-dtor {{implicitly declared private here}}
+ C B::c; // #cwg580-c
+ // expected-error@#cwg580-c {{calling a private constructor of class 'cwg580::C'}}
+ // expected-note@#cwg580-C-ctor {{implicitly declared private here}}
+ // expected-error@#cwg580-c {{variable of type 'C' has private destructor}}
+ // expected-note@#cwg580-C-dtor {{implicitly declared private here}}
}
-// dr582: na
+// cwg582: na
-namespace dr583 { // dr583: 4
+namespace cwg583 { // cwg583: 4
// see n3624
int *p;
bool b1 = p < 0;
@@ -1095,35 +1095,35 @@ namespace dr583 { // dr583: 4
// expected-error at -1 {{ordered comparison between pointer and zero ('int *' and 'int')}}
}
-// dr584: na
+// cwg584: na
-namespace dr585 { // dr585: 3.0
- template<typename> struct T; // #dr585-struct-T
+namespace cwg585 { // cwg585: 3.0
+ template<typename> struct T; // #cwg585-struct-T
struct A {
friend T;
// cxx98-14-error at -1 {{a type specifier is required for all declarations}}
// cxx98-14-error at -2 {{friends can only be classes or functions}}
// since-cxx17-error at -3 {{use of class template 'T' requires template arguments; argument deduction not allowed in friend declaration}}
- // since-cxx17-note@#dr585-struct-T {{template is declared here}}
+ // since-cxx17-note@#cwg585-struct-T {{template is declared here}}
// FIXME: It's not clear whether the standard allows this or what it means,
- // but the DR585 writeup suggests it as an alternative.
+ // but the CWG585 writeup suggests it as an alternative.
template<typename U> friend T<U>;
// expected-error at -1 {{friend type templates must use an elaborated type}}
};
- template<template<typename> class T> struct B { // #dr585-template-T
+ template<template<typename> class T> struct B { // #cwg585-template-T
friend T;
// cxx98-14-error at -1 {{a type specifier is required for all declarations}}
// cxx98-14-error at -2 {{friends can only be classes or functions}}
// since-cxx17-error at -3 {{use of template template parameter 'T' requires template arguments; argument deduction not allowed in friend declaration}}
- // since-cxx17-note@#dr585-template-T {{template is declared here}}
+ // since-cxx17-note@#cwg585-template-T {{template is declared here}}
template<typename U> friend T<U>;
// expected-error at -1 {{friend type templates must use an elaborated type}}
};
}
-// dr586: na
+// cwg586: na
-namespace dr587 { // dr587: 3.2
+namespace cwg587 { // cwg587: 3.2
template<typename T> void f(bool b, const T x, T y) {
const T *p = &(b ? x : y);
}
@@ -1132,22 +1132,22 @@ namespace dr587 { // dr587: 3.2
template void f(bool, const S, S);
}
-namespace dr588 { // dr588: yes
- struct A { int n; }; // #dr588-A
+namespace cwg588 { // cwg588: yes
+ struct A { int n; }; // #cwg588-A
template<typename T> int f() {
struct S : A, T { int f() { return n; } } s;
int a = s.f();
int b = s.n;
// expected-error at -1 {{member 'n' found in multiple base classes of
diff erent types}}
- // expected-note@#dr588-k {{in instantiation of function template specialization 'dr588::f<dr588::B>' requested here}}
- // expected-note@#dr588-A {{member found by ambiguous name lookup}}
- // expected-note@#dr588-B {{member found by ambiguous name lookup}}
+ // expected-note@#cwg588-k {{in instantiation of function template specialization 'cwg588::f<cwg588::B>' requested here}}
+ // expected-note@#cwg588-A {{member found by ambiguous name lookup}}
+ // expected-note@#cwg588-B {{member found by ambiguous name lookup}}
}
- struct B { int n; }; // #dr588-B
- int k = f<B>(); // #dr588-k
+ struct B { int n; }; // #cwg588-B
+ int k = f<B>(); // #cwg588-k
}
-namespace dr589 { // dr589: yes
+namespace cwg589 { // cwg589: yes
struct B { };
struct D : B { };
D f();
@@ -1159,7 +1159,7 @@ namespace dr589 { // dr589: yes
// expected-error at -1 {{taking the address of a temporary object of type 'const B'}}
}
-namespace dr590 { // dr590: yes
+namespace cwg590 { // cwg590: yes
template<typename T> struct A {
struct B {
struct C {
@@ -1170,7 +1170,7 @@ namespace dr590 { // dr590: yes
template<typename T> typename A<T>::B::C A<T>::B::C::f(A<T>::B::C) {}
}
-namespace dr591 { // dr591: no
+namespace cwg591 { // cwg591: no
template<typename T> struct A {
typedef int M;
struct B {
@@ -1186,11 +1186,11 @@ namespace dr591 { // dr591: no
};
}
-// dr592: na
-// dr593 is in dr593.cpp
-// dr594: na
+// cwg592: na
+// cwg593 is in cwg593.cpp
+// cwg594: na
-namespace dr595 { // dr595: dup 1330
+namespace cwg595 { // cwg595: dup 1330
template<class T> struct X {
void f() throw(T) {}
// since-cxx17-error at -1 {{ISO C++17 does not allow dynamic exception specifications}}
@@ -1201,9 +1201,9 @@ namespace dr595 { // dr595: dup 1330
};
}
-// dr597: na
+// cwg597: na
-namespace dr598 { // dr598: yes
+namespace cwg598 { // cwg598: yes
namespace N {
void f(int);
void f(char);
@@ -1225,11 +1225,11 @@ namespace dr598 { // dr598: yes
int &t = h(N::i);
}
-namespace dr599 { // dr599: partial
+namespace cwg599 { // cwg599: partial
typedef int Fn();
struct S { operator void*(); };
struct T { operator Fn*(); };
- struct U { operator int*(); operator void*(); }; // #dr599-U
+ struct U { operator int*(); operator void*(); }; // #cwg599-U
struct V { operator int*(); operator Fn*(); };
void f(void *p, void (*q)(), S s, T t, U u, V v) {
delete p;
@@ -1244,8 +1244,8 @@ namespace dr599 { // dr599: partial
// extension allowing deletion of pointers to void.
delete u;
// expected-error at -1 {{ambiguous conversion of delete expression of type 'U' to a pointer}}
- // expected-note@#dr599-U {{conversion to pointer type 'int *'}}
- // expected-note@#dr599-U {{conversion to pointer type 'void *'}}
+ // expected-note@#cwg599-U {{conversion to pointer type 'int *'}}
+ // expected-note@#cwg599-U {{conversion to pointer type 'void *'}}
delete v;
}
}
diff --git a/clang/test/CXX/drs/dr6xx.cpp b/clang/test/CXX/drs/dr6xx.cpp
index eeb41eee9c30f9..d004d5aa4c7917 100644
--- a/clang/test/CXX/drs/dr6xx.cpp
+++ b/clang/test/CXX/drs/dr6xx.cpp
@@ -5,29 +5,29 @@
// RUN: %clang_cc1 -std=c++20 %s -verify=expected,cxx11-20,since-cxx11 -fexceptions -fcxx-exceptions -pedantic-errors -fno-spell-checking
// RUN: %clang_cc1 -std=c++23 %s -verify=expected,since-cxx11 -fexceptions -fcxx-exceptions -pedantic-errors -fno-spell-checking
-namespace dr600 { // dr600: 2.8
+namespace cwg600 { // cwg600: 2.8
struct S {
void f(int);
private:
- void f(double); // #dr600-f-double
+ void f(double); // #cwg600-f-double
};
void g(S *sp) {
sp->f(2);
// access control is applied after overload resolution
sp->f(2.2);
- // expected-error at -1 {{'f' is a private member of 'dr600::S'}}
- // expected-note@#dr600-f-double {{declared private here}}
+ // expected-error at -1 {{'f' is a private member of 'cwg600::S'}}
+ // expected-note@#cwg600-f-double {{declared private here}}
}
-} // namespace dr600
+} // namespace cwg600
namespace std {
struct type_info {};
__extension__ typedef __SIZE_TYPE__ size_t;
} // namespace std
-namespace dr601 { // dr601: yes
+namespace cwg601 { // cwg601: yes
#if __cplusplus >= 201103L
#define MAX __LLONG_MAX__
#else
@@ -58,7 +58,7 @@ static_assert(0x8000000000000000 < -1, "0x8000000000000000 should be unsigned");
#undef MAX
}
-namespace dr602 { // dr602: yes
+namespace cwg602 { // cwg602: yes
template<class T> struct A {
template<class U> friend struct A;
};
@@ -73,31 +73,31 @@ namespace dr602 { // dr602: yes
B<int> b;
}
-namespace dr603 { // dr603: yes
+namespace cwg603 { // cwg603: yes
template<unsigned char> struct S {};
typedef S<'\001'> S1;
typedef S<(1ul << __CHAR_BIT__) + 1> S1;
// since-cxx11-error at -1 {{cannot be narrowed}}
}
-// dr604: na
-// dr605 is in dr605.cpp
+// cwg604: na
+// cwg605 is in cwg605.cpp
-namespace dr606 { // dr606: 3.0
+namespace cwg606 { // cwg606: 3.0
#if __cplusplus >= 201103L
template<typename T> struct S {};
- template<typename T> void f(S<T> &&); // #dr606-f
+ template<typename T> void f(S<T> &&); // #cwg606-f
template<typename T> void g(T &&);
- template<typename T> void h(const T &&); // #dr606-h
+ template<typename T> void h(const T &&); // #cwg606-h
void test(S<int> s) {
f(s);
// since-cxx11-error at -1 {{no matching function for call to 'f'}}
- // since-cxx11-note@#dr606-f {{candidate function [with T = int] not viable: expects an rvalue for 1st argument}}
+ // since-cxx11-note@#cwg606-f {{candidate function [with T = int] not viable: expects an rvalue for 1st argument}}
g(s);
h(s);
// since-cxx11-error at -1 {{no matching function for call to 'h'}}
- // since-cxx11-note@#dr606-h {{candidate function [with T = dr606::S<int>] not viable: expects an rvalue for 1st argument}}
+ // since-cxx11-note@#cwg606-h {{candidate function [with T = cwg606::S<int>] not viable: expects an rvalue for 1st argument}}
g(test);
h(test); // ok, an rvalue reference can bind to a function lvalue
@@ -105,7 +105,7 @@ namespace dr606 { // dr606: 3.0
#endif
}
-namespace dr607 { // dr607: yes
+namespace cwg607 { // cwg607: yes
namespace example1 {
struct Y {};
@@ -131,25 +131,25 @@ struct D : B {
N::D::D() : typedef_B(0) {}
} // namespace example2
-} // namespace dr607
+} // namespace cwg607
-namespace dr608 { // dr608: yes
+namespace cwg608 { // cwg608: yes
struct A { virtual void f(); };
struct B : A {};
struct C : A { void f(); };
struct D : B, C {};
}
-int dr610[-0u == 0u ? 1 : -1]; // dr610: yes
+int cwg610[-0u == 0u ? 1 : -1]; // cwg610: yes
-namespace dr611 { // dr611: yes
+namespace cwg611 { // cwg611: yes
int k;
struct S { int &r; } s = { k ? k : k };
}
-// dr612: na
+// cwg612: na
-namespace dr613 { // dr613: yes c++11
+namespace cwg613 { // cwg613: yes c++11
// see also n2253
struct A { int n; static void f(); };
int f(int);
@@ -158,7 +158,7 @@ namespace dr613 { // dr613: yes c++11
int an1 = sizeof(A::n);
// cxx98-error at -1 {{invalid use of non-static data member 'n'}}
- int an2 = sizeof(A::n + 1); // valid per dr850
+ int an2 = sizeof(A::n + 1); // valid per cwg850
// cxx98-error at -1 {{invalid use of non-static data member 'n'}}
int an3 = sizeof A::n;
// cxx98-error at -1 {{invalid use of non-static data member 'n'}}
@@ -186,15 +186,15 @@ namespace dr613 { // dr613: yes c++11
}
}
-int dr614_a[(-1) / 2 == 0 ? 1 : -1]; // dr614: yes
-int dr614_b[(-1) % 2 == -1 ? 1 : -1];
+int cwg614_a[(-1) / 2 == 0 ? 1 : -1]; // cwg614: yes
+int cwg614_b[(-1) % 2 == -1 ? 1 : -1];
-namespace dr615 { // dr615: yes
+namespace cwg615 { // cwg615: yes
int f();
static int n = f();
}
-namespace dr616 { // dr616: 4
+namespace cwg616 { // cwg616: 4
#if __cplusplus >= 201103L
struct S { int n; } s;
S f();
@@ -212,13 +212,13 @@ namespace dr616 { // dr616: 4
#endif
}
-namespace dr618 { // dr618: yes
+namespace cwg618 { // cwg618: yes
#if (unsigned)-1 > 0
#error wrong
#endif
}
-namespace dr619 { // dr619: yes
+namespace cwg619 { // cwg619: yes
extern int x[10];
struct S { static int x[10]; };
@@ -240,22 +240,22 @@ namespace dr619 { // dr619: yes
}
}
-// dr620: dup 568
+// cwg620: dup 568
-namespace dr621 { // dr621: yes
+namespace cwg621 { // cwg621: yes
template<typename T> T f();
- template<> int f() {} // #dr621-f
+ template<> int f() {} // #cwg621-f
template<> int f<int>() {}
// expected-error at -1 {{redefinition of 'f<int>'}}
- // expected-note@#dr621-f {{previous definition is here}}
+ // expected-note@#cwg621-f {{previous definition is here}}
}
-// dr623: na
+// cwg623: na
// FIXME: Add documentation saying we allow invalid pointer values.
-// dr624 needs a libc++abi test.
+// cwg624 needs a libc++abi test.
-namespace dr625 { // dr625: yes
+namespace cwg625 { // cwg625: yes
template<typename T> struct A {};
A<auto> x = A<int>();
// cxx98-error at -1 {{'auto' type specifier is a C++11 extension}}
@@ -266,14 +266,14 @@ namespace dr625 { // dr625: yes
// expected-error at -2 {{'auto' not allowed in function prototype}}
}
-namespace dr626 { // dr626: yes
+namespace cwg626 { // cwg626: yes
#define STR(x) #x
char c[2] = STR(c); // ok, type matches
wchar_t w[2] = STR(w);
// expected-error at -1 {{initializing wide char array with non-wide string literal}}
}
-namespace dr627 { // dr627: yes
+namespace cwg627 { // cwg627: yes
void f() {
// FIXME: emitted diagnostic have a room for improvement
true a = 0;
@@ -283,22 +283,22 @@ namespace dr627 { // dr627: yes
}
}
-// dr628: na
+// cwg628: na
-namespace dr629 { // dr629: 2.9
+namespace cwg629 { // cwg629: 2.9
typedef int T;
int n = 1;
void f() {
- auto T = 2; // #dr629-T
+ auto T = 2; // #cwg629-T
// cxx98-error at -1 {{expected unqualified-id}}
auto T(n);
// since-cxx11-error at -1 {{redefinition of 'T'}}
- // since-cxx11-note@#dr629-T {{previous definition is here}}
+ // since-cxx11-note@#cwg629-T {{previous definition is here}}
}
}
-namespace dr630 { // dr630: yes
+namespace cwg630 { // cwg630: yes
const bool MB_EQ_WC =
' ' == L' ' && '\t' == L'\t' && '\v' == L'\v' && '\r' == L'\r' &&
'\n' == L'\n' && //
@@ -334,17 +334,17 @@ _Static_assert(MB_EQ_WC, "!__STDC_MB_MIGHT_NEQ_WC__ but some character
diff ers")
#endif
}
-// dr631: na
+// cwg631: na
-namespace dr632 { // dr632: yes
+namespace cwg632 { // cwg632: yes
struct S { int n; } s = {{5}};
// expected-warning at -1 {{braces around scalar initializer}}
}
-// dr633: na
+// cwg633: na
// see also n2993
-namespace dr634 { // dr634: yes
+namespace cwg634 { // cwg634: yes
struct S { S(); S(const S&); virtual void f(); ~S(); };
int f(...);
char f(int);
@@ -356,7 +356,7 @@ namespace dr634 { // dr634: yes
// since-cxx11-error at -2 {{cannot pass object of non-trivial type 'S' through variadic function; call will abort at runtime}}
}
-namespace dr635 { // dr635: yes
+namespace cwg635 { // cwg635: yes
template<typename T> struct A { A(); ~A(); };
template<typename T> A<T>::A<T>() {}
// expected-error at -1 {{out-of-line constructor for 'A' cannot have template arguments}}
@@ -375,15 +375,15 @@ namespace dr635 { // dr635: yes
/*FIXME: needed for error recovery:*/;
template<typename T> struct D { template<typename U> D(); D(); };
- template<typename T> D<T>::D() {} // #dr635-D
+ template<typename T> D<T>::D() {} // #cwg635-D
template<typename T> template<typename U> D<T>::D() {}
- template<typename T> D<T>::D<T>() {} // #dr635-D-T
- // expected-error@#dr635-D-T {{out-of-line constructor for 'D' cannot have template arguments}}
- // expected-error@#dr635-D-T {{redefinition of 'D<T>'}}
- // expected-note@#dr635-D {{previous definition is here}}
+ template<typename T> D<T>::D<T>() {} // #cwg635-D-T
+ // expected-error@#cwg635-D-T {{out-of-line constructor for 'D' cannot have template arguments}}
+ // expected-error@#cwg635-D-T {{redefinition of 'D<T>'}}
+ // expected-note@#cwg635-D {{previous definition is here}}
}
-namespace dr637 { // dr637: yes
+namespace cwg637 { // cwg637: yes
void f(int i) {
i = ++i + 1;
i = i++ + 1;
@@ -391,7 +391,7 @@ namespace dr637 { // dr637: yes
}
}
-namespace dr638 { // dr638: no
+namespace cwg638 { // cwg638: no
template<typename T> struct A {
struct B;
void f();
@@ -426,23 +426,23 @@ namespace dr638 { // dr638: no
};
}
-namespace dr639 { // dr639: 3.3
+namespace cwg639 { // cwg639: 3.3
void f(int i) {
void((i = 0) + (i = 0));
// expected-warning at -1 {{multiple unsequenced modifications to 'i'}}
}
}
-namespace dr641 { // dr641: yes
+namespace cwg641 { // cwg641: yes
namespace std_example {
struct abc;
struct xyz {
- xyz(); // #dr641-xyz-ctor
- xyz(xyz &); // #dr641-xyz-copy-ctor
+ xyz(); // #cwg641-xyz-ctor
+ xyz(xyz &); // #cwg641-xyz-copy-ctor
operator xyz &() = delete;
- // expected-warning at -1 {{conversion function converting 'dr641::std_example::xyz' to itself will never be used}}
+ // expected-warning at -1 {{conversion function converting 'cwg641::std_example::xyz' to itself will never be used}}
// cxx98-error at -2 {{deleted function definitions are a C++11 extension}}
operator abc &() = delete;
// cxx98-error at -1 {{deleted function definitions are a C++11 extension}}
@@ -451,15 +451,15 @@ namespace dr641 { // dr641: yes
struct abc : xyz {};
template<typename T>
- void use(T &); // #dr641-use
+ void use(T &); // #cwg641-use
void test() {
use<xyz>(xyz());
// expected-error at -1 {{no matching function for call to 'use'}}
- // expected-note@#dr641-use {{candidate function template not viable: expects an lvalue for 1st argument}}
+ // expected-note@#cwg641-use {{candidate function template not viable: expects an lvalue for 1st argument}}
use<const xyz>(xyz());
// cxx98-error at -1 {{no viable constructor copying parameter of type 'xyz'; C++98 requires a copy constructor when binding a reference to a temporary}}
- // cxx98-note@#dr641-xyz-copy-ctor {{candidate constructor not viable: expects an lvalue for 1st argument}}
- // cxx98-note@#dr641-xyz-ctor {{candidate constructor not viable: requires 0 arguments, but 1 was provided}}
+ // cxx98-note@#cwg641-xyz-copy-ctor {{candidate constructor not viable: expects an lvalue for 1st argument}}
+ // cxx98-note@#cwg641-xyz-ctor {{candidate constructor not viable: requires 0 arguments, but 1 was provided}}
}
}
@@ -470,20 +470,20 @@ namespace dr641 { // dr641: yes
// cxx98-error at -1 {{default template arguments for a function template are a C++11 extension}}
};
A a;
- void f(A&); // #dr641-f
+ void f(A&); // #cwg641-f
void g(const A ca) {
f(A());
// expected-error at -1 {{no matching function for call to 'f'}}
- // expected-note@#dr641-f {{candidate function not viable: expects an lvalue for 1st argument}}
+ // expected-note@#cwg641-f {{candidate function not viable: expects an lvalue for 1st argument}}
f(ca);
// expected-error at -1 {{no matching function for call to 'f'}}
- // expected-note@#dr641-f {{candidate function not viable: 1st argument ('const A') would lose const qualifier}}
+ // expected-note@#cwg641-f {{candidate function not viable: 1st argument ('const A') would lose const qualifier}}
(void)A();
(void)ca;
}
}
-namespace dr642 { // dr642: yes
+namespace cwg642 { // cwg642: yes
void f() {
const int i = 2;
{
@@ -501,16 +501,16 @@ namespace dr642 { // dr642: yes
}
#if __cplusplus >= 201103L
-namespace dr643 { // dr643: 3.2
+namespace cwg643 { // cwg643: 3.2
struct A {
int x;
auto f() -> decltype(this->x);
auto f(A &a) -> decltype(a.x);
auto g() -> decltype(x);
auto h() -> decltype(this->y);
- // since-cxx11-error at -1 {{no member named 'y' in 'dr643::A'}}
+ // since-cxx11-error at -1 {{no member named 'y' in 'cwg643::A'}}
auto h(A &a) -> decltype(a.y);
- // since-cxx11-error at -1 {{no member named 'y' in 'dr643::A'}}
+ // since-cxx11-error at -1 {{no member named 'y' in 'cwg643::A'}}
auto i() -> decltype(y);
// since-cxx11-error at -1 {{use of undeclared identifier 'y'}}
int y;
@@ -519,7 +519,7 @@ namespace dr643 { // dr643: 3.2
#endif
#if __cplusplus >= 201103L
-namespace dr644 { // dr644: partial
+namespace cwg644 { // cwg644: partial
struct A {
A() = default;
int x, y;
@@ -535,7 +535,7 @@ namespace dr644 { // dr644: partial
struct D { C c; };
static_assert(!__is_literal_type(D), "");
- // FIXME: According to DR644, E<C> is a literal type despite having virtual
+ // FIXME: According to CWG644, E<C> is a literal type despite having virtual
// base classes. This appears to be a wording defect.
template<typename T>
struct E : T {
@@ -545,12 +545,12 @@ namespace dr644 { // dr644: partial
}
#endif
-// dr645 increases permission to optimize; it's not clear that it's possible to
+// cwg645 increases permission to optimize; it's not clear that it's possible to
// test for this.
-// dr645: na
+// cwg645: na
#if __cplusplus >= 201103L
-namespace dr646 { // dr646: sup 981
+namespace cwg646 { // cwg646: sup 981
struct A {
constexpr A(const A&) = default; // ok
};
@@ -564,28 +564,28 @@ namespace dr646 { // dr646: sup 981
#endif
#if __cplusplus >= 201103L
-namespace dr647 { // dr647: 3.1
- // This is partially superseded by dr1358.
+namespace cwg647 { // cwg647: 3.1
+ // This is partially superseded by cwg1358.
struct A {
constexpr virtual void f() const;
constexpr virtual void g() const {}
// cxx11-17-error at -1 {{virtual function cannot be constexpr}}
};
- struct X { virtual void f() const; }; // #dr647-f
+ struct X { virtual void f() const; }; // #cwg647-f
struct B : X {
constexpr void f() const {}
// cxx11-17-error at -1 {{virtual function cannot be constexpr}}
- // cxx11-17-note@#dr647-f {{overridden virtual function is here}}
+ // cxx11-17-note@#cwg647-f {{overridden virtual function is here}}
};
- struct NonLiteral { NonLiteral() {} }; // #dr647-NonLiteral
+ struct NonLiteral { NonLiteral() {} }; // #cwg647-NonLiteral
struct C {
constexpr C(NonLiteral);
constexpr C(NonLiteral, int) {}
// cxx11-20-error at -1 {{constexpr constructor's 1st parameter type 'NonLiteral' is not a literal type}}
- // cxx11-20-note@#dr647-NonLiteral {{'NonLiteral' is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors}}
+ // cxx11-20-note@#cwg647-NonLiteral {{'NonLiteral' is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors}}
constexpr C() try {} catch (...) {}
// cxx11-17-error at -1 {{function try block in constexpr constructor is a C++20 extension}}
// cxx11-error at -2 {{use of this statement in a constexpr constructor is a C++14 extension}}
@@ -594,7 +594,7 @@ namespace dr647 { // dr647: 3.1
struct D {
operator int() const;
constexpr D(int) {}
- D(float); // #dr647-D-float-ctor
+ D(float); // #cwg647-D-float-ctor
};
constexpr int get();
struct E {
@@ -602,7 +602,7 @@ namespace dr647 { // dr647: 3.1
D d;
// FIXME: We should diagnose this, as the conversion function is not
- // constexpr. However, that part of this issue is supreseded by dr1364 and
+ // constexpr. However, that part of this issue is supreseded by cwg1364 and
// others; no diagnostic is required for this any more.
constexpr E()
: n(D(0)),
@@ -610,22 +610,22 @@ namespace dr647 { // dr647: 3.1
constexpr E(int)
// cxx11-20-error at -1 {{constexpr constructor never produces a constant expression}}
- // cxx11-20-note@#dr647-int-d {{non-constexpr constructor 'D' cannot be used in a constant expression}}
- // cxx11-20-note@#dr647-D-float-ctor {{declared here}}
+ // cxx11-20-note@#cwg647-int-d {{non-constexpr constructor 'D' cannot be used in a constant expression}}
+ // cxx11-20-note@#cwg647-D-float-ctor {{declared here}}
: n(0),
- d(0.0f) {} // #dr647-int-d
+ d(0.0f) {} // #cwg647-int-d
constexpr E(float f)
// cxx11-20-error at -1 {{never produces a constant expression}}
- // cxx11-20-note@#dr647-float-d {{non-constexpr constructor}}
- // cxx11-20-note@#dr647-D-float-ctor {{declared here}}
+ // cxx11-20-note@#cwg647-float-d {{non-constexpr constructor}}
+ // cxx11-20-note@#cwg647-D-float-ctor {{declared here}}
: n(get()),
- d(D(0) + f) {} // #dr647-float-d
+ d(D(0) + f) {} // #cwg647-float-d
};
}
#endif
#if __cplusplus >= 201103L
-namespace dr648 { // dr648: yes
+namespace cwg648 { // cwg648: yes
int f();
constexpr int a = (true ? 1 : f());
constexpr int b = false && f();
@@ -634,7 +634,7 @@ namespace dr648 { // dr648: yes
#endif
#if __cplusplus >= 201103L
-namespace dr649 { // dr649: 3.5
+namespace cwg649 { // cwg649: 3.5
// Maximum alignment is 8192 bytes for Windows, and 4 GB for Linux
alignas(0x200000000) int n;
// since-cxx11-error-re at -1 {{{{requested alignment must be (8192|4294967296) bytes or smaller}}}}
@@ -645,15 +645,15 @@ struct Y {
// since-cxx11-error-re at -1 {{{{requested alignment must be (8192|4294967296) bytes or smaller}}}}
};
struct alignas(256) Z {};
- // This part is superseded by dr2130 and eventually by aligned allocation support.
+ // This part is superseded by cwg2130 and eventually by aligned allocation support.
auto *p = new Z;
}
#endif
-// dr650 is in dr650.cpp
+// cwg650 is in cwg650.cpp
#if __cplusplus >= 201103L
-namespace dr651 { // dr651: yes
+namespace cwg651 { // cwg651: yes
struct X {
virtual X &f();
};
@@ -666,16 +666,16 @@ namespace dr651 { // dr651: yes
#endif
#if __cplusplus >= 201103L
-namespace dr652 { // dr652: yes
+namespace cwg652 { // cwg652: yes
constexpr int n = 1.2 * 3.4;
static_assert(n == 4, "");
}
#endif
-// dr653 is in dr653.cpp
+// cwg653 is in cwg653.cpp
#if __cplusplus >= 201103L
-namespace dr654 { // dr654: sup 1423
+namespace cwg654 { // cwg654: sup 1423
void f() {
if (nullptr) {}
// since-cxx11-warning at -1 {{implicit conversion of nullptr constant to 'bool'}}
@@ -701,31 +701,31 @@ namespace dr654 { // dr654: sup 1423
}
#endif
-namespace dr655 { // dr655: yes
- struct A { A(int); }; // #dr655-A
+namespace cwg655 { // cwg655: yes
+ struct A { A(int); }; // #cwg655-A
struct B : A {
- A a; // #dr655-a
+ A a; // #cwg655-a
B();
B(int) : B() {}
// cxx98-error at -1 {{delegating constructors are permitted only in C++11}}
- B(int*) : A() {} // #dr655-delegating-to-A
+ B(int*) : A() {} // #cwg655-delegating-to-A
// expected-error at -1 {{no matching constructor for initialization of 'A'}}
- // expected-note@#dr655-A {{candidate constructor not viable: requires 1 argument, but 0 were provided}}
- // expected-note@#dr655-A {{candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0 were provided}}
- // since-cxx11-note@#dr655-A {{candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 0 were provided}}
- // expected-error@#dr655-delegating-to-A {{constructor for 'dr655::B' must explicitly initialize the member 'a' which does not have a default constructor}}
- // expected-note@#dr655-a {{member is declared here}}
- // expected-note@#dr655-A {{'dr655::A' declared here}}
+ // expected-note@#cwg655-A {{candidate constructor not viable: requires 1 argument, but 0 were provided}}
+ // expected-note@#cwg655-A {{candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0 were provided}}
+ // since-cxx11-note@#cwg655-A {{candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 0 were provided}}
+ // expected-error@#cwg655-delegating-to-A {{constructor for 'cwg655::B' must explicitly initialize the member 'a' which does not have a default constructor}}
+ // expected-note@#cwg655-a {{member is declared here}}
+ // expected-note@#cwg655-A {{'cwg655::A' declared here}}
};
}
-namespace dr656 { // dr656: yes
+namespace cwg656 { // cwg656: yes
struct A { A(const A&) = delete; };
// cxx98-error at -1 {{deleted function definitions are a C++11 extension}}
struct B : A {};
struct X { operator B(); } x;
const A &r = x;
- struct Y : private A { // #dr656-Y
+ struct Y : private A { // #cwg656-Y
operator B() volatile;
};
extern Y y;
@@ -733,7 +733,7 @@ namespace dr656 { // dr656: yes
// Conversion not considered due to reference-related types.
const A &s = y;
// expected-error at -1 {{cannot cast 'const Y' to its private base class 'const A'}}
- // expected-note@#dr656-Y {{declared private here}}
+ // expected-note@#cwg656-Y {{declared private here}}
const A &t = vy;
// expected-error at -1 {{binding reference of type 'const A' to value of type 'volatile Y' drops 'volatile' qualifier}}
@@ -741,27 +741,27 @@ namespace dr656 { // dr656: yes
struct D : C {};
const D &d = c; // ok, D not reference-related to C
- template<typename T> void accept(T); // #dr656-accept-T
- template<typename T> void accept(...) = delete; // #dr656-accept-var
+ template<typename T> void accept(T); // #cwg656-accept-T
+ template<typename T> void accept(...) = delete; // #cwg656-accept-var
// cxx98-error at -1 {{deleted function definitions are a C++11 extension}}
void f() {
accept<const A&>(x);
accept<const A&>(y);
- // expected-error at -1 {{cannot cast 'const Y' to its private base class 'const dr656::A'}}
- // expected-note@#dr656-Y {{declared private here}}
- accept<const A&>(vy); // #dr656-vy
+ // expected-error at -1 {{cannot cast 'const Y' to its private base class 'const cwg656::A'}}
+ // expected-note@#cwg656-Y {{declared private here}}
+ accept<const A&>(vy); // #cwg656-vy
// expected-error at -1 {{call to deleted function 'accept'}}
- // expected-note@#dr656-accept-var {{candidate function [with T = const dr656::A &] has been explicitly deleted}}
- // expected-note@#dr656-accept-T {{candidate function template not viable: no known conversion from 'volatile Y' to 'const A &' for 1st argument}}
- // expected-error@#dr656-vy {{no matching constructor for initialization of 'volatile Y'}}
- // expected-note@#dr656-Y {{candidate constructor (the implicit copy constructor) not viable: 1st argument ('volatile Y') would lose volatile qualifier}}
- // expected-note@#dr656-Y {{candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided}}
+ // expected-note@#cwg656-accept-var {{candidate function [with T = const cwg656::A &] has been explicitly deleted}}
+ // expected-note@#cwg656-accept-T {{candidate function template not viable: no known conversion from 'volatile Y' to 'const A &' for 1st argument}}
+ // expected-error@#cwg656-vy {{no matching constructor for initialization of 'volatile Y'}}
+ // expected-note@#cwg656-Y {{candidate constructor (the implicit copy constructor) not viable: 1st argument ('volatile Y') would lose volatile qualifier}}
+ // expected-note@#cwg656-Y {{candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided}}
accept<const D&>(c);
}
}
-namespace dr657 { // dr657: partial
- struct Abs { virtual void x() = 0; }; // #dr657-Abs
+namespace cwg657 { // cwg657: partial
+ struct Abs { virtual void x() = 0; }; // #cwg657-Abs
struct Der : public Abs { virtual void x(); };
struct Cnvt { template<typename F> Cnvt(F); };
@@ -779,7 +779,7 @@ namespace dr657 { // dr657: partial
struct C { C(Abs) {} };
// expected-error at -1 {{parameter type 'Abs' is an abstract class}}
- // expected-note@#dr657-Abs {{unimplemented pure virtual method 'x' in 'Abs'}}
+ // expected-note@#cwg657-Abs {{unimplemented pure virtual method 'x' in 'Abs'}}
struct Q { operator Abs() { __builtin_unreachable(); } } q;
// expected-error at -1 {{return type 'Abs' is an abstract class}}
#if __cplusplus >= 201703L
@@ -798,23 +798,23 @@ namespace dr657 { // dr657: partial
Cnvt2<Abs>::type err;
}
-// dr658 is in dr658.cpp
+// cwg658 is in cwg658.cpp
#if __cplusplus >= 201103L
-namespace dr659 { // dr659: 3.0
+namespace cwg659 { // cwg659: 3.0
static_assert(alignof(char) == alignof(char&), "");
static_assert(alignof(int) == alignof(int&), "");
int n = alignof(int(&)());
// since-cxx11-error at -1 {{invalid application of 'alignof' to a function type}}
- struct A; // #dr659-A
+ struct A; // #cwg659-A
int m = alignof(A&);
// since-cxx11-error at -1 {{invalid application of 'alignof' to an incomplete type 'A'}}
- // since-cxx11-note@#dr659-A {{forward declaration of 'dr659::A'}}
+ // since-cxx11-note@#cwg659-A {{forward declaration of 'cwg659::A'}}
}
#endif
#if __cplusplus >= 201103L
-namespace dr660 { // dr660: 3.0
+namespace cwg660 { // cwg660: 3.0
enum : int { a };
enum class { b };
// since-cxx11-error at -1 {{scoped enumeration requires a name}}
@@ -829,27 +829,27 @@ namespace dr660 { // dr660: 3.0
}
#endif
-// dr661 is in dr661.cpp
+// cwg661 is in cwg661.cpp
-namespace dr662 { // dr662: yes
+namespace cwg662 { // cwg662: yes
template <typename T> void f(T t) {
T &tr = t;
T *tp = &t;
// expected-error at -1 {{'tp' declared as a pointer to a reference of type 'int &'}}
- // expected-note@#dr662-f-call {{in instantiation of function template specialization 'dr662::f<int &>' requested here}}
+ // expected-note@#cwg662-f-call {{in instantiation of function template specialization 'cwg662::f<int &>' requested here}}
#if __cplusplus >= 201103L
auto *ap = &t;
#endif
}
- void g(int n) { f<int&>(n); } // #dr662-f-call
+ void g(int n) { f<int&>(n); } // #cwg662-f-call
}
-namespace dr663 { // dr663: sup P1949
+namespace cwg663 { // cwg663: sup P1949
int ЍЎ = 123;
}
#if __cplusplus >= 201103L
-namespace dr664 { // dr664: yes
+namespace cwg664 { // cwg664: yes
struct A { A(const A&) = delete; };
A &&f(A &&a, int n) {
if (n)
@@ -859,41 +859,41 @@ namespace dr664 { // dr664: yes
}
#endif
-namespace dr665 { // dr665: 2.8
+namespace cwg665 { // cwg665: 2.8
struct A { virtual ~A(); };
struct B : A {} *b;
- struct C : private A {} *c; // #dr665-C
+ struct C : private A {} *c; // #cwg665-C
struct D : B, C {} *d;
struct VB : virtual A {} *vb;
- struct VC : private virtual A {} *vc; // #dr665-VC
+ struct VC : private virtual A {} *vc; // #cwg665-VC
struct VD : VB, VC {} *vd;
void f() {
(void)dynamic_cast<A*>(b);
(void)dynamic_cast<A*>(c);
- // expected-error at -1 {{cannot cast 'dr665::C' to its private base class 'dr665::A'}}
- // expected-note@#dr665-C {{declared private here}}
+ // expected-error at -1 {{cannot cast 'cwg665::C' to its private base class 'cwg665::A'}}
+ // expected-note@#cwg665-C {{declared private here}}
(void)dynamic_cast<A*>(d);
- /* expected-error at -1 {{ambiguous conversion from derived class 'dr665::D' to base class 'dr665::A':
- struct dr665::D -> B -> A
- struct dr665::D -> C -> A}} */
+ /* expected-error at -1 {{ambiguous conversion from derived class 'cwg665::D' to base class 'cwg665::A':
+ struct cwg665::D -> B -> A
+ struct cwg665::D -> C -> A}} */
(void)dynamic_cast<A*>(vb);
(void)dynamic_cast<A*>(vc); // emitting diagnostic, even though it could be valid at runtime
- // expected-error at -1 {{cannot cast 'dr665::VC' to its private base class 'dr665::A'}}
- // expected-note@#dr665-VC {{declared private here}}
+ // expected-error at -1 {{cannot cast 'cwg665::VC' to its private base class 'cwg665::A'}}
+ // expected-note@#cwg665-VC {{declared private here}}
(void)dynamic_cast<A*>(vd);
}
}
-namespace dr666 { // dr666: 2.8
+namespace cwg666 { // cwg666: 2.8
struct P { friend P operator*(P, P); P(int); } p(0);
template<int> int f();
template<typename T> int f() {
T::type *p = 0;
// expected-error at -1 {{missing 'typename' prior to dependent type name 'Y::type'}}
- // expected-note@#dr666-f-Y {{in instantiation of function template specialization 'dr666::f<dr666::Y>' requested here}}
+ // expected-note@#cwg666-f-Y {{in instantiation of function template specialization 'cwg666::f<cwg666::Y>' requested here}}
int a(T::type);
// expected-error at -1 {{missing 'typename' prior to dependent type name 'Y::type'}}
return f<T::type>();
@@ -902,18 +902,18 @@ namespace dr666 { // dr666: 2.8
struct X { static const int type = 0; };
struct Y { typedef int type; };
int a = f<X>();
- int b = f<Y>(); // #dr666-f-Y
+ int b = f<Y>(); // #cwg666-f-Y
}
// Triviality is entirely
diff erent in C++98.
#if __cplusplus >= 201103L
-namespace dr667 { // dr667: 8
+namespace cwg667 { // cwg667: 8
struct A {
- A() = default; // #dr667-A-ctor
+ A() = default; // #cwg667-A-ctor
// since-cxx11-warning at -1 {{explicitly defaulted default constructor is implicitly deleted}}
- // since-cxx11-note@#dr667-r {{default constructor of 'A' is implicitly deleted because field 'r' of reference type 'int &' would not be initialized}}
- // since-cxx11-note@#dr667-A-ctor {{replace 'default' with 'delete'}}
- int &r; // #dr667-r
+ // since-cxx11-note@#cwg667-r {{default constructor of 'A' is implicitly deleted because field 'r' of reference type 'int &' would not be initialized}}
+ // since-cxx11-note@#cwg667-A-ctor {{replace 'default' with 'delete'}}
+ int &r; // #cwg667-r
};
static_assert(!__is_trivially_constructible(A), "");
@@ -931,10 +931,10 @@ namespace dr667 { // dr667: 8
}
#endif
-// dr668 needs an libc++abi test
+// cwg668 needs an libc++abi test
#if __cplusplus >= 201103L
-namespace dr669 { // dr669: yes
+namespace cwg669 { // cwg669: yes
void f() {
int n;
using T = decltype(n);
@@ -962,7 +962,7 @@ namespace dr669 { // dr669: yes
}
#endif
-namespace dr671 { // dr671: 2.9
+namespace cwg671 { // cwg671: 2.9
enum class E { e };
// cxx98-error at -1 {{scoped enumerations are a C++11 extension}}
E e = static_cast<E>(0);
@@ -971,9 +971,9 @@ namespace dr671 { // dr671: 2.9
int m = static_cast<int>(e);
}
-// dr672 is in dr672.cpp
+// cwg672 is in cwg672.cpp
-namespace dr673 { // dr673: yes
+namespace cwg673 { // cwg673: yes
template<typename> struct X { static const int n = 0; };
class A {
@@ -991,7 +991,7 @@ namespace dr673 { // dr673: yes
// expected-error at -1 {{unknown type name 'F'}}
}
-namespace dr674 { // dr674: 8
+namespace cwg674 { // cwg674: 8
template<typename T> int f(T);
int g(int);
@@ -1001,25 +1001,25 @@ namespace dr674 { // dr674: 8
template<typename T> int h(T);
class X {
- friend int dr674::f(int);
- friend int dr674::g(int);
- friend int dr674::h<>(int);
- int n; // #dr674-X-n
+ friend int cwg674::f(int);
+ friend int cwg674::g(int);
+ friend int cwg674::h<>(int);
+ int n; // #cwg674-X-n
};
template<typename T> int f(T) { return X().n; }
int g(int) { return X().n; }
template<typename T> int g(T) { return X().n; }
- // expected-error at -1 {{'n' is a private member of 'dr674::X'}}
- // expected-note@#dr674-g-int {{in instantiation of function template specialization 'dr674::g<int>' requested here}}
- // expected-note@#dr674-X-n {{implicitly declared private here}}
+ // expected-error at -1 {{'n' is a private member of 'cwg674::X'}}
+ // expected-note@#cwg674-g-int {{in instantiation of function template specialization 'cwg674::g<int>' requested here}}
+ // expected-note@#cwg674-X-n {{implicitly declared private here}}
int h(int) { return X().n; }
- // expected-error at -1 {{'n' is a private member of 'dr674::X'}}
- // expected-note@#dr674-X-n {{implicitly declared private here}}
+ // expected-error at -1 {{'n' is a private member of 'cwg674::X'}}
+ // expected-note@#cwg674-X-n {{implicitly declared private here}}
template<typename T> int h(T) { return X().n; }
template int f(int);
- template int g(int); // #dr674-g-int
+ template int g(int); // #cwg674-g-int
template int h(int);
@@ -1037,27 +1037,27 @@ namespace dr674 { // dr674: 8
friend int Y::f(int);
friend int Y::g(int);
friend int Y::h<>(int);
- int n; // #dr674-Z-n
+ int n; // #cwg674-Z-n
};
template<typename T> int Y::f(T) { return Z().n; }
int Y::g(int) { return Z().n; }
template<typename T> int Y::g(T) { return Z().n; }
- // expected-error at -1 {{'n' is a private member of 'dr674::Z'}}
- // expected-note@#dr674-Y-g-int {{in instantiation of function template specialization 'dr674::Y::g<int>' requested here}}
- // expected-note@#dr674-Z-n {{implicitly declared private here}}
+ // expected-error at -1 {{'n' is a private member of 'cwg674::Z'}}
+ // expected-note@#cwg674-Y-g-int {{in instantiation of function template specialization 'cwg674::Y::g<int>' requested here}}
+ // expected-note@#cwg674-Z-n {{implicitly declared private here}}
int Y::h(int) { return Z().n; }
- // expected-error at -1 {{'n' is a private member of 'dr674::Z'}}
- // expected-note@#dr674-Z-n {{implicitly declared private here}}
+ // expected-error at -1 {{'n' is a private member of 'cwg674::Z'}}
+ // expected-note@#cwg674-Z-n {{implicitly declared private here}}
template<typename T> int Y::h(T) { return Z().n; }
// FIXME: Should the <> be required here?
template int Y::f<>(int);
- template int Y::g<>(int); // #dr674-Y-g-int
+ template int Y::g<>(int); // #cwg674-Y-g-int
template int Y::h<>(int);
}
-namespace dr675 { // dr675: dup 739
+namespace cwg675 { // cwg675: dup 739
template<typename T> struct A { T n : 1; };
#if __cplusplus >= 201103L
static_assert(A<char>{1}.n < 0, "");
@@ -1069,47 +1069,47 @@ namespace dr675 { // dr675: dup 739
#endif
}
-// dr676: na
+// cwg676: na
-namespace dr677 { // dr677: no
+namespace cwg677 { // cwg677: no
struct A {
void *operator new(std::size_t);
- void operator delete(void*) = delete; // #dr677-A-delete
+ void operator delete(void*) = delete; // #cwg677-A-delete
// cxx98-error at -1 {{deleted function definitions are a C++11 extension}}
};
struct B {
void *operator new(std::size_t);
- void operator delete(void*) = delete; // #dr677-B-delete
+ void operator delete(void*) = delete; // #cwg677-B-delete
// cxx98-error at -1 {{deleted function definitions are a C++11 extension}}
virtual ~B();
};
void f(A *p) { delete p; }
// expected-error at -1 {{attempt to use a deleted function}}
- // expected-note@#dr677-A-delete {{'operator delete' has been explicitly marked deleted here}}
+ // expected-note@#cwg677-A-delete {{'operator delete' has been explicitly marked deleted here}}
// FIXME: This appears to be valid; we shouldn't even be looking up the 'operator delete' here.
void f(B *p) { delete p; }
// expected-error at -1 {{attempt to use a deleted function}}
- // expected-note@#dr677-B-delete {{'operator delete' has been explicitly marked deleted here}}
+ // expected-note@#cwg677-B-delete {{'operator delete' has been explicitly marked deleted here}}
B::~B() {}
// expected-error at -1 {{attempt to use a deleted function}}
- // expected-note@#dr677-B-delete {{'operator delete' has been explicitly marked deleted here}}
+ // expected-note@#cwg677-B-delete {{'operator delete' has been explicitly marked deleted here}}
}
-// dr678 FIXME: check that the modules ODR check catches this
+// cwg678 FIXME: check that the modules ODR check catches this
-namespace dr679 { // dr679: yes
+namespace cwg679 { // cwg679: yes
struct X {};
template<int> void operator+(X, X);
- template<> void operator+<0>(X, X) {} // #dr679-def
+ template<> void operator+<0>(X, X) {} // #cwg679-def
template<> void operator+<0>(X, X) {}
// expected-error at -1 {{redefinition of 'operator+<0>'}}
- // expected-note@#dr679-def {{previous definition is here}}
+ // expected-note@#cwg679-def {{previous definition is here}}
}
-// dr680: na
+// cwg680: na
#if __cplusplus >= 201103L
-namespace dr681 { // dr681: partial
+namespace cwg681 { // cwg681: partial
auto *a() -> int;
// since-cxx11-error at -1 {{function with trailing return type must specify return type 'auto', not 'auto *'}}
auto (*b)() -> int;
@@ -1132,7 +1132,7 @@ namespace dr681 { // dr681: partial
#endif
#if __cplusplus >= 201103L
-namespace dr683 { // dr683: yes
+namespace cwg683 { // cwg683: yes
struct A {
A() = default;
A(const A&) = default;
@@ -1150,18 +1150,18 @@ namespace dr683 { // dr683: yes
#endif
#if __cplusplus >= 201103L
-namespace dr684 { // dr684: sup 1454
+namespace cwg684 { // cwg684: sup 1454
void f() {
- int a; // #dr684-a
+ int a; // #cwg684-a
constexpr int *p = &a;
// expected-error at -1 {{constexpr variable 'p' must be initialized by a constant expression}}
// expected-note at -2 {{pointer to 'a' is not a constant expression}}
- // expected-note@#dr684-a {{here}}
+ // expected-note@#cwg684-a {{here}}
}
}
#endif
-namespace dr685 { // dr685: yes
+namespace cwg685 { // cwg685: yes
enum E : long { e };
// cxx98-error at -1 {{enumeration types with a fixed underlying type are a C++11 extension}}
void f(int);
@@ -1178,20 +1178,20 @@ namespace dr685 { // dr685: yes
void i(long);
int c = i(g);
- int j(unsigned int); // #dr685-j-uint
- void j(long); // #dr685-j-long
+ int j(unsigned int); // #cwg685-j-uint
+ void j(long); // #cwg685-j-long
int d = j(g);
// expected-error at -1 {{call to 'j' is ambiguous}}
- // expected-note@#dr685-j-uint {{candidate function}}
- // expected-note@#dr685-j-long {{candidate function}}
+ // expected-note@#cwg685-j-uint {{candidate function}}
+ // expected-note@#cwg685-j-long {{candidate function}}
- // Valid per dr1601
+ // Valid per cwg1601
int k(short);
void k(int);
int x = k(g);
}
-namespace dr686 { // dr686: 3.0
+namespace cwg686 { // cwg686: 3.0
void f() {
(void)dynamic_cast<struct A*>(0);
// expected-error at -1 {{'A' is an incomplete type}}
@@ -1214,11 +1214,11 @@ namespace dr686 { // dr686: 3.0
(void)sizeof(struct F*);
(void)sizeof(struct F{}*);
// expected-error at -1 {{'F' cannot be defined in a type specifier}}
- (void)new struct G*; // #dr686-G
- (void)new struct G{}*; // #dr686-G-def
+ (void)new struct G*; // #cwg686-G
+ (void)new struct G{}*; // #cwg686-G-def
// expected-error at -1 {{allocation of incomplete type 'struct G'}}
- // expected-note@#dr686-G {{forward declaration of 'G'}}
- // since-cxx11-error@#dr686-G-def {{expected expression}}
+ // expected-note@#cwg686-G {{forward declaration of 'G'}}
+ // since-cxx11-error@#cwg686-G-def {{expected expression}}
#if __cplusplus >= 201103L
(void)alignof(struct H*);
(void)alignof(struct H{}*);
@@ -1256,10 +1256,10 @@ namespace dr686 { // dr686: 3.0
}
template<struct R *> struct X;
template<struct R {} *> struct Y;
- // expected-error at -1 {{'dr686::R' cannot be defined in a type specifier}}
+ // expected-error at -1 {{'cwg686::R' cannot be defined in a type specifier}}
}
-namespace dr687 { // dr687 (9 c++20, but the issue is still considered open)
+namespace cwg687 { // cwg687 (9 c++20, but the issue is still considered open)
template<typename T> void f(T a) {
// This is valid in C++20.
g<int>(a);
@@ -1271,8 +1271,8 @@ namespace dr687 { // dr687 (9 c++20, but the issue is still considered open)
}
}
-namespace dr692 { // dr692: 16
- // Also see dr1395.
+namespace cwg692 { // cwg692: 16
+ // Also see cwg1395.
namespace temp_func_order_example2 {
template <typename... T> struct A1 {};
@@ -1287,11 +1287,11 @@ namespace dr692 { // dr692: 16
// cxx98-error at -1 {{variadic templates are a C++11 extension}}
// cxx98-error at -2 {{deleted function definitions are a C++11 extension}}
template <typename T1> void e2(A2<T1>);
- template <typename T, typename U> void f(U, A1<U, T> *p = 0) = delete; // #dr692-f-deleted
+ template <typename T, typename U> void f(U, A1<U, T> *p = 0) = delete; // #cwg692-f-deleted
// cxx98-error at -1 {{deleted function definitions are a C++11 extension}}
- template <typename U> int &f(U, A1<U, U> *p = 0); // #dr692-f
- template <typename T> void g(T, T = T()); // #dr692-g
- template <typename T, typename... U> void g(T, U...); // #dr692-g-variadic
+ template <typename U> int &f(U, A1<U, U> *p = 0); // #cwg692-f
+ template <typename T> void g(T, T = T()); // #cwg692-g
+ template <typename T, typename... U> void g(T, U...); // #cwg692-g-variadic
// cxx98-error at -1 {{variadic templates are a C++11 extension}}
void h() {
A1<int, int> a;
@@ -1302,12 +1302,12 @@ namespace dr692 { // dr692: 16
e2(b2);
f<int>(42);
// expected-error at -1 {{call to 'f' is ambiguous}}
- // expected-note@#dr692-f-deleted {{candidate function [with T = int, U = int] has been explicitly deleted}}
- // expected-note@#dr692-f {{candidate function [with U = int]}}
+ // expected-note@#cwg692-f-deleted {{candidate function [with T = int, U = int] has been explicitly deleted}}
+ // expected-note@#cwg692-f {{candidate function [with U = int]}}
g(42);
// expected-error at -1 {{ambiguous}}
- // expected-note@#dr692-g {{candidate function [with T = int]}}
- // expected-note@#dr692-g-variadic {{candidate function [with T = int, U = <>]}}
+ // expected-note@#cwg692-g {{candidate function [with T = int]}}
+ // expected-note@#cwg692-g-variadic {{candidate function [with T = int, U = <>]}}
}
}
@@ -1319,7 +1319,7 @@ namespace dr692 { // dr692: 16
// cxx98-error at -1 {{variadic templates are a C++11 extension}}
template <typename T> void g(T);
void h(int i) {
- // This is made ambiguous by dr692, but made valid again by dr1395.
+ // This is made ambiguous by cwg692, but made valid again by cwg1395.
f(&i);
int &r = g(&i);
}
@@ -1362,23 +1362,23 @@ namespace dr692 { // dr692: 16
}
}
-namespace dr696 { // dr696: 3.1
+namespace cwg696 { // cwg696: 3.1
void f(const int*);
void g() {
- const int N = 10; // #dr696-N
+ const int N = 10; // #cwg696-N
struct A {
void h() {
int arr[N]; (void)arr;
f(&N);
- // expected-error at -1 {{reference to local variable 'N' declared in enclosing function 'dr696::g'}}
- // expected-note@#dr696-N {{'N' declared here}}
+ // expected-error at -1 {{reference to local variable 'N' declared in enclosing function 'cwg696::g'}}
+ // expected-note@#cwg696-N {{'N' declared here}}
}
};
#if __cplusplus >= 201103L
(void) [] { int arr[N]; (void)arr; };
(void)[] { f(&N); };
// since-cxx11-error at -1 {{variable 'N' cannot be implicitly captured in a lambda with no capture-default specified}}
- // since-cxx11-note@#dr696-N {{'N' declared here}}
+ // since-cxx11-note@#cwg696-N {{'N' declared here}}
// since-cxx11-note at -3 {{lambda expression begins here}}
// since-cxx11-note at -4 {{capture 'N' by value}}
// since-cxx11-note at -5 {{capture 'N' by reference}}
diff --git a/clang/test/CXX/drs/dr7xx.cpp b/clang/test/CXX/drs/dr7xx.cpp
index 2cbdc218ab7b5b..69ee6d6d4e6ae0 100644
--- a/clang/test/CXX/drs/dr7xx.cpp
+++ b/clang/test/CXX/drs/dr7xx.cpp
@@ -4,10 +4,10 @@
// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++17 %s -verify=expected,since-cxx14,since-cxx11 -fexceptions -fcxx-exceptions -pedantic-errors
// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++2a %s -verify=expected,since-cxx14,since-cxx11 -fexceptions -fcxx-exceptions -pedantic-errors
-namespace dr705 { // dr705: yes
+namespace cwg705 { // cwg705: yes
namespace N {
struct S {};
- void f(S); // #dr705-f
+ void f(S); // #cwg705-f
}
void g() {
@@ -15,14 +15,14 @@ namespace dr705 { // dr705: yes
f(s); // ok
(f)(s);
// expected-error at -1 {{use of undeclared identifier 'f'}}
- // expected-note@#dr705-f {{'N::f' declared here}}
+ // expected-note@#cwg705-f {{'N::f' declared here}}
}
}
-namespace dr712 { // dr712: partial
+namespace cwg712 { // cwg712: partial
void use(int);
void f() {
- const int a = 0; // #dr712-f-a
+ const int a = 0; // #cwg712-f-a
struct X {
void g(bool cond) {
use(a);
@@ -34,20 +34,20 @@ namespace dr712 { // dr712: partial
// expected-warning at -2 {{left operand of comma operator has no effect}}
(void)a;
- // expected-error at -1 {{reference to local variable 'a' declared in enclosing function 'dr712::f'}} FIXME
- // expected-note@#dr712-f-a {{'a' declared here}}
+ // expected-error at -1 {{reference to local variable 'a' declared in enclosing function 'cwg712::f'}} FIXME
+ // expected-note@#cwg712-f-a {{'a' declared here}}
(void)(a);
- // expected-error at -1 {{reference to local variable 'a' declared in enclosing function 'dr712::f'}} FIXME
- // expected-note@#dr712-f-a {{'a' declared here}}
- (void)(cond ? a : a); // #dr712-ternary
- // expected-error@#dr712-ternary {{reference to local variable 'a' declared in enclosing function 'dr712::f'}} FIXME
- // expected-note@#dr712-f-a {{'a' declared here}}
- // expected-error@#dr712-ternary {{reference to local variable 'a' declared in enclosing function 'dr712::f'}} FIXME
- // expected-note@#dr712-f-a {{'a' declared here}}
- (void)(cond, a); // #dr712-comma
- // expected-error at -1 {{reference to local variable 'a' declared in enclosing function 'dr712::f'}} FIXME
- // expected-note@#dr712-f-a {{'a' declared here}}
- // expected-warning@#dr712-comma {{left operand of comma operator has no effect}}
+ // expected-error at -1 {{reference to local variable 'a' declared in enclosing function 'cwg712::f'}} FIXME
+ // expected-note@#cwg712-f-a {{'a' declared here}}
+ (void)(cond ? a : a); // #cwg712-ternary
+ // expected-error@#cwg712-ternary {{reference to local variable 'a' declared in enclosing function 'cwg712::f'}} FIXME
+ // expected-note@#cwg712-f-a {{'a' declared here}}
+ // expected-error@#cwg712-ternary {{reference to local variable 'a' declared in enclosing function 'cwg712::f'}} FIXME
+ // expected-note@#cwg712-f-a {{'a' declared here}}
+ (void)(cond, a); // #cwg712-comma
+ // expected-error at -1 {{reference to local variable 'a' declared in enclosing function 'cwg712::f'}} FIXME
+ // expected-note@#cwg712-f-a {{'a' declared here}}
+ // expected-warning@#cwg712-comma {{left operand of comma operator has no effect}}
}
};
}
@@ -55,29 +55,29 @@ namespace dr712 { // dr712: partial
#if __cplusplus >= 201103L
void g() {
struct A { int n; };
- constexpr A a = {0}; // #dr712-g-a
+ constexpr A a = {0}; // #cwg712-g-a
struct X {
void g(bool cond) {
use(a.n);
use(a.*&A::n);
(void)a.n;
- // since-cxx11-error at -1 {{reference to local variable 'a' declared in enclosing function 'dr712::g'}} FIXME
- // since-cxx11-note@#dr712-g-a {{'a' declared here}}
+ // since-cxx11-error at -1 {{reference to local variable 'a' declared in enclosing function 'cwg712::g'}} FIXME
+ // since-cxx11-note@#cwg712-g-a {{'a' declared here}}
(void)(a.*&A::n);
- // since-cxx11-error at -1 {{reference to local variable 'a' declared in enclosing function 'dr712::g'}} FIXME
- // since-cxx11-note@#dr712-g-a {{'a' declared here}}
+ // since-cxx11-error at -1 {{reference to local variable 'a' declared in enclosing function 'cwg712::g'}} FIXME
+ // since-cxx11-note@#cwg712-g-a {{'a' declared here}}
}
};
}
#endif
}
-namespace dr727 { // dr727: partial
+namespace cwg727 { // cwg727: partial
struct A {
- template<typename T> struct C; // #dr727-C
- template<typename T> void f(); // #dr727-f
- template<typename T> static int N; // #dr727-N
+ template<typename T> struct C; // #cwg727-C
+ template<typename T> void f(); // #cwg727-f
+ template<typename T> static int N; // #cwg727-N
// cxx98-11-error at -1 {{variable templates are a C++14 extension}}
template<> struct C<int>;
@@ -90,40 +90,40 @@ namespace dr727 { // dr727: partial
struct B {
template<> struct C<float>;
// expected-error at -1 {{class template specialization of 'C' not in class 'A' or an enclosing namespace}}
- // expected-note@#dr727-C {{explicitly specialized declaration is here}}
+ // expected-note@#cwg727-C {{explicitly specialized declaration is here}}
template<> void f<float>();
// expected-error at -1 {{no function template matches function template specialization 'f'}}
template<> static int N<float>;
// expected-error at -1 {{variable template specialization of 'N' not in class 'A' or an enclosing namespace}}
- // expected-note@#dr727-N {{explicitly specialized declaration is here}}
+ // expected-note@#cwg727-N {{explicitly specialized declaration is here}}
template<typename T> struct C<T**>;
// expected-error at -1 {{class template partial specialization of 'C' not in class 'A' or an enclosing namespace}}
- // expected-note@#dr727-C {{explicitly specialized declaration is here}}
+ // expected-note@#cwg727-C {{explicitly specialized declaration is here}}
template<typename T> static int N<T**>;
// expected-error at -1 {{variable template partial specialization of 'N' not in class 'A' or an enclosing namespace}}
- // expected-note@#dr727-N {{explicitly specialized declaration is here}}
+ // expected-note@#cwg727-N {{explicitly specialized declaration is here}}
template<> struct A::C<double>;
// expected-error at -1 {{non-friend class member 'C' cannot have a qualified name}}
// expected-error at -2 {{class template specialization of 'C' not in class 'A' or an enclosing namespace}}
- // expected-note@#dr727-C {{explicitly specialized declaration is here}}
+ // expected-note@#cwg727-C {{explicitly specialized declaration is here}}
template<> void A::f<double>();
// expected-error at -1 {{o function template matches function template specialization 'f'}}
// expected-error at -2 {{non-friend class member 'f' cannot have a qualified name}}
template<> static int A::N<double>;
// expected-error at -1 {{non-friend class member 'N' cannot have a qualified name}}
// expected-error at -2 {{variable template specialization of 'N' not in class 'A' or an enclosing namespace}}
- // expected-note@#dr727-N {{explicitly specialized declaration is here}}
+ // expected-note@#cwg727-N {{explicitly specialized declaration is here}}
template<typename T> struct A::C<T***>;
// expected-error at -1 {{non-friend class member 'C' cannot have a qualified name}}
// expected-error at -2 {{class template partial specialization of 'C' not in class 'A' or an enclosing namespace}}
- // expected-note@#dr727-C {{explicitly specialized declaration is here}}
+ // expected-note@#cwg727-C {{explicitly specialized declaration is here}}
template<typename T> static int A::N<T***>;
// expected-error at -1 {{non-friend class member 'N' cannot have a qualified name}}
// expected-error at -2 {{variable template partial specialization of 'N' not in class 'A' or an enclosing namespace}}
- // expected-note@#dr727-N {{explicitly specialized declaration is here}}
+ // expected-note@#cwg727-N {{explicitly specialized declaration is here}}
};
};
@@ -137,34 +137,34 @@ namespace dr727 { // dr727: partial
namespace C {
template<> struct A::C<long>;
// expected-error at -1 {{class template specialization of 'C' not in class 'A' or an enclosing namespace}}
- // expected-note@#dr727-C {{explicitly specialized declaration is here}}
+ // expected-note@#cwg727-C {{explicitly specialized declaration is here}}
template<> void A::f<long>();
// expected-error at -1 {{function template specialization of 'f' not in class 'A' or an enclosing namespace}}
- // expected-note@#dr727-f {{explicitly specialized declaration is here}}
+ // expected-note@#cwg727-f {{explicitly specialized declaration is here}}
template<> int A::N<long>;
// expected-error at -1 {{variable template specialization of 'N' not in class 'A' or an enclosing namespace}}
- // expected-note@#dr727-N {{explicitly specialized declaration is here}}
+ // expected-note@#cwg727-N {{explicitly specialized declaration is here}}
template<typename T> struct A::C<T*****>;
// expected-error at -1 {{class template partial specialization of 'C' not in class 'A' or an enclosing namespace}}
- // expected-note@#dr727-C {{explicitly specialized declaration is here}}
+ // expected-note@#cwg727-C {{explicitly specialized declaration is here}}
template<typename T> int A::N<T*****>;
// expected-error at -1 {{variable template partial specialization of 'N' not in class 'A' or an enclosing namespace}}
- // expected-note@#dr727-N {{explicitly specialized declaration is here}}
+ // expected-note@#cwg727-N {{explicitly specialized declaration is here}}
}
template<typename>
struct D {
template<typename T> struct C { typename T::error e; };
// expected-error at -1 {{type 'float' cannot be used prior to '::' because it has no members}}
- // expected-note@#dr727-C-float {{in instantiation of template class 'dr727::D<int>::C<float>' requested here}}
+ // expected-note@#cwg727-C-float {{in instantiation of template class 'cwg727::D<int>::C<float>' requested here}}
template<typename T> void f() { T::error; }
// expected-error at -1 {{type 'float' cannot be used prior to '::' because it has no members}}
- // expected-note@#dr727-f-float {{in instantiation of function template specialization 'dr727::D<int>::f<float>' requested here}}
+ // expected-note@#cwg727-f-float {{in instantiation of function template specialization 'cwg727::D<int>::f<float>' requested here}}
template<typename T> static const int N = T::error;
// cxx98-11-error at -1 {{variable templates are a C++14 extension}}
// expected-error at -2 {{type 'float' cannot be used prior to '::' because it has no members}}
- // expected-note@#dr727-N-float {{in instantiation of static data member 'dr727::D<int>::N<float>' requested here}}
+ // expected-note@#cwg727-N-float {{in instantiation of static data member 'cwg727::D<int>::N<float>' requested here}}
template<> struct C<int> {};
template<> void f<int>() {}
@@ -188,9 +188,9 @@ namespace dr727 { // dr727: partial
D<int>::C<int*>();
int b = D<int>::N<int*>;
- D<int>::C<float>(); // #dr727-C-float
- di.f<float>(); // #dr727-f-float
- int c = D<int>::N<float>; // #dr727-N-float
+ D<int>::C<float>(); // #cwg727-C-float
+ di.f<float>(); // #cwg727-f-float
+ int c = D<int>::N<float>; // #cwg727-N-float
}
namespace mixed_inner_outer_specialization {
@@ -210,14 +210,14 @@ namespace dr727 { // dr727: partial
#if __cplusplus >= 201402L
template<int> struct B {
template<int> static const int u = 1;
- template<> static const int u<0> = 2; // #dr727-u0
+ template<> static const int u<0> = 2; // #cwg727-u0
// Note that in C++17 onwards, these are implicitly inline, and so the
// initializer of v<0> is not instantiated with the declaration. In
// C++14, v<0> is a non-defining declaration and its initializer is
// instantiated with the class.
template<int> static constexpr int v = 1;
- template<> static constexpr int v<0> = 2; // #dr727-v0
+ template<> static constexpr int v<0> = 2; // #cwg727-v0
template<int> static const inline int w = 1;
// cxx14-error at -1 {{inline variables are a C++17 extension}}
@@ -228,12 +228,12 @@ namespace dr727 { // dr727: partial
template<> template<int> constexpr int B<0>::u = 3;
template<> template<> constexpr int B<0>::u<0> = 4;
// since-cxx14-error at -1 {{static data member 'u' already has an initializer}}
- // since-cxx14-note@#dr727-u0 {{previous initialization is here}}
+ // since-cxx14-note@#cwg727-u0 {{previous initialization is here}}
template<> template<int> constexpr int B<0>::v = 3;
template<> template<> constexpr int B<0>::v<0> = 4;
// cxx14-error at -1 {{static data member 'v' already has an initializer}}
- // cxx14-note@#dr727-v0 {{previous initialization is here}}
+ // cxx14-note@#cwg727-v0 {{previous initialization is here}}
template<> template<int> constexpr int B<0>::w = 3;
template<> template<> constexpr int B<0>::w<0> = 4;
@@ -246,7 +246,7 @@ namespace dr727 { // dr727: partial
static_assert(B<1>().v<0> == 2, "");
static_assert(B<0>().v<1> == 3, "");
static_assert(B<0>().v<0> == 4, "");
- // cxx14-error at -1 {{static assertion failed due to requirement 'dr727::mixed_inner_outer_specialization::B<0>().v<0> == 4'}}
+ // cxx14-error at -1 {{static assertion failed due to requirement 'cwg727::mixed_inner_outer_specialization::B<0>().v<0> == 4'}}
// cxx14-note at -2 {{expression evaluates to '2 == 4'}}
static_assert(B<1>().w<1> == 1, "");
@@ -269,21 +269,21 @@ namespace dr727 { // dr727: partial
template<typename> static int v1;
// cxx98-11-error at -1 {{variable templates are a C++14 extension}}
- template<> static int v1<T>; // #dr727-v1-T
+ template<> static int v1<T>; // #cwg727-v1-T
template<> static int v1<U>;
// expected-error at -1 {{duplicate member 'v1'}}
- // expected-note@#dr727-Collision-int-int {{in instantiation of template class 'dr727::Collision<int, int>' requested here}}
- // expected-note@#dr727-v1-T {{previous}}
+ // expected-note@#cwg727-Collision-int-int {{in instantiation of template class 'cwg727::Collision<int, int>' requested here}}
+ // expected-note@#cwg727-v1-T {{previous}}
template<typename> static inline int v2;
// cxx98-11-error at -1 {{variable templates are a C++14 extension}}
// cxx98-14-error at -2 {{inline variables are a C++17 extension}}
- template<> static inline int v2<T>; // #dr727-v2-T
+ template<> static inline int v2<T>; // #cwg727-v2-T
// cxx98-14-error at -1 {{inline variables are a C++17 extension}}
template<> static inline int v2<U>;
// cxx98-14-error at -1 {{inline variables are a C++17 extension}}
// expected-error at -2 {{duplicate member 'v2'}}
- // expected-note@#dr727-v2-T {{previous declaration is here}}
+ // expected-note@#cwg727-v2-T {{previous declaration is here}}
// FIXME: Missing diagnostic for duplicate class explicit specialization.
template<typename> struct S1;
@@ -291,15 +291,15 @@ namespace dr727 { // dr727: partial
template<> struct S1<U>;
template<typename> struct S2;
- template<> struct S2<T> {}; // #dr727-S2-T
+ template<> struct S2<T> {}; // #cwg727-S2-T
template<> struct S2<U> {};
// expected-error at -1 {{redefinition of 'S2<int>'}}
- // expected-note@#dr727-S2-T {{previous}}
+ // expected-note@#cwg727-S2-T {{previous}}
};
- Collision<int, int> c; // #dr727-Collision-int-int
+ Collision<int, int> c; // #cwg727-Collision-int-int
}
-namespace dr777 { // dr777: 3.7
+namespace cwg777 { // cwg777: 3.7
#if __cplusplus >= 201103L
template <typename... T>
void f(int i = 0, T ...args) {}
diff --git a/clang/test/CXX/drs/dr8xx.cpp b/clang/test/CXX/drs/dr8xx.cpp
index b031e65095cdb0..eba601300584d8 100644
--- a/clang/test/CXX/drs/dr8xx.cpp
+++ b/clang/test/CXX/drs/dr8xx.cpp
@@ -10,18 +10,18 @@
// expected-no-diagnostics
#endif
-namespace dr873 { // dr873: 3.0
+namespace cwg873 { // cwg873: 3.0
#if __cplusplus >= 201103L
template <typename T> void f(T &&);
-template <> void f(int &) = delete; // #dr873-lvalue-ref
-template <> void f(int &&) = delete; // #dr873-rvalue-ref
+template <> void f(int &) = delete; // #cwg873-lvalue-ref
+template <> void f(int &&) = delete; // #cwg873-rvalue-ref
void g(int i) {
f(i); // calls f<int&>(int&)
// since-cxx11-error at -1 {{call to deleted function 'f'}}
- // since-cxx11-note@#dr873-lvalue-ref {{candidate function [with T = int &] has been implicitly deleted}}
+ // since-cxx11-note@#cwg873-lvalue-ref {{candidate function [with T = int &] has been implicitly deleted}}
f(0); // calls f<int>(int&&)
// since-cxx11-error at -1 {{call to deleted function 'f'}}
- // since-cxx11-note@#dr873-rvalue-ref {{candidate function [with T = int] has been implicitly deleted}}
+ // since-cxx11-note@#cwg873-rvalue-ref {{candidate function [with T = int] has been implicitly deleted}}
}
#endif
-} // namespace dr873
+} // namespace cwg873
diff --git a/clang/test/CXX/drs/dr9xx.cpp b/clang/test/CXX/drs/dr9xx.cpp
index 7ea295a684b7a2..8ecb149c355f6c 100644
--- a/clang/test/CXX/drs/dr9xx.cpp
+++ b/clang/test/CXX/drs/dr9xx.cpp
@@ -14,7 +14,7 @@ namespace std {
};
}
-namespace dr948 { // dr948: 3.7
+namespace cwg948 { // cwg948: 3.7
#if __cplusplus >= 201103L
class A {
public:
@@ -43,34 +43,34 @@ namespace dr948 { // dr948: 3.7
#endif
}
-namespace dr952 { // dr952: 2.8
+namespace cwg952 { // cwg952: 2.8
namespace example1 {
struct A {
- typedef int I; // #dr952-I
+ typedef int I; // #cwg952-I
};
-struct B : private A { // #dr952-B
+struct B : private A { // #cwg952-B
};
struct C : B {
void f() {
I i1;
- // expected-error at -1 {{'I' is a private member of 'dr952::example1::A'}}
- // expected-note@#dr952-B {{constrained by private inheritance here}}
- // expected-note@#dr952-I {{member is declared here}}
+ // expected-error at -1 {{'I' is a private member of 'cwg952::example1::A'}}
+ // expected-note@#cwg952-B {{constrained by private inheritance here}}
+ // expected-note@#cwg952-I {{member is declared here}}
}
I i2;
- // expected-error at -1 {{'I' is a private member of 'dr952::example1::A'}}
- // expected-note@#dr952-B {{constrained by private inheritance here}}
- // expected-note@#dr952-I {{member is declared here}}
+ // expected-error at -1 {{'I' is a private member of 'cwg952::example1::A'}}
+ // expected-note@#cwg952-B {{constrained by private inheritance here}}
+ // expected-note@#cwg952-I {{member is declared here}}
struct D {
I i3;
- // expected-error at -1 {{'I' is a private member of 'dr952::example1::A'}}
- // expected-note@#dr952-B {{constrained by private inheritance here}}
- // expected-note@#dr952-I {{member is declared here}}
+ // expected-error at -1 {{'I' is a private member of 'cwg952::example1::A'}}
+ // expected-note@#cwg952-B {{constrained by private inheritance here}}
+ // expected-note@#cwg952-I {{member is declared here}}
void g() {
I i4;
- // expected-error at -1 {{'I' is a private member of 'dr952::example1::A'}}
- // expected-note@#dr952-B {{constrained by private inheritance here}}
- // expected-note@#dr952-I {{member is declared here}}
+ // expected-error at -1 {{'I' is a private member of 'cwg952::example1::A'}}
+ // expected-note@#cwg952-B {{constrained by private inheritance here}}
+ // expected-note@#cwg952-I {{member is declared here}}
}
};
};
@@ -84,9 +84,9 @@ struct B : A {
friend int get(B) { return x; }
};
} // namespace example2
-} // namespace dr952
+} // namespace cwg952
-namespace dr974 { // dr974: yes
+namespace cwg974 { // cwg974: yes
#if __cplusplus >= 201103L
void test() {
auto lam = [](int x = 42) { return x; };
@@ -94,23 +94,23 @@ namespace dr974 { // dr974: yes
#endif
}
-namespace dr977 { // dr977: yes
-enum E { e = E() }; // #dr977-E
+namespace cwg977 { // cwg977: yes
+enum E { e = E() }; // #cwg977-E
#if !defined(_WIN32) || defined(__MINGW32__)
-// expected-error@#dr977-E {{invalid use of incomplete type 'E'}}
-// expected-note@#dr977-E {{definition of 'dr977::E' is not complete until the closing '}'}}
+// expected-error@#cwg977-E {{invalid use of incomplete type 'E'}}
+// expected-note@#cwg977-E {{definition of 'cwg977::E' is not complete until the closing '}'}}
#endif
#if __cplusplus >= 201103L
enum E2 : int { e2 = E2() };
enum struct E3 { e = static_cast<int>(E3()) };
enum struct E4 : int { e = static_cast<int>(E4()) };
#endif
-} // namespace dr977
+} // namespace cwg977
-namespace dr990 { // dr990: 3.5
+namespace cwg990 { // cwg990: 3.5
#if __cplusplus >= 201103L
- struct A { // #dr990-A
- A(std::initializer_list<int>); // #dr990-A-init-list
+ struct A { // #cwg990-A
+ A(std::initializer_list<int>); // #cwg990-A-init-list
};
struct B {
A a;
@@ -118,20 +118,20 @@ namespace dr990 { // dr990: 3.5
B b1 { };
B b2 { 1 };
// since-cxx11-error at -1 {{no viable conversion from 'int' to 'A'}}
- // since-cxx11-note@#dr990-A {{candidate constructor (the implicit copy constructor) not viable: no known conversion from 'int' to 'const A &' for 1st argument}}
- // since-cxx11-note@#dr990-A {{candidate constructor (the implicit move constructor) not viable: no known conversion from 'int' to 'A &&' for 1st argument}}
- // since-cxx11-note@#dr990-A-init-list {{candidate constructor not viable: no known conversion from 'int' to 'std::initializer_list<int>' for 1st argument}}
+ // since-cxx11-note@#cwg990-A {{candidate constructor (the implicit copy constructor) not viable: no known conversion from 'int' to 'const A &' for 1st argument}}
+ // since-cxx11-note@#cwg990-A {{candidate constructor (the implicit move constructor) not viable: no known conversion from 'int' to 'A &&' for 1st argument}}
+ // since-cxx11-note@#cwg990-A-init-list {{candidate constructor not viable: no known conversion from 'int' to 'std::initializer_list<int>' for 1st argument}}
B b3 { { 1 } };
struct C {
C();
C(int);
- C(std::initializer_list<int>) = delete; // #dr990-deleted
+ C(std::initializer_list<int>) = delete; // #cwg990-deleted
};
C c1[3] { 1 }; // ok
C c2[3] { 1, {2} };
// since-cxx11-error at -1 {{call to deleted constructor of 'C'}}
- // since-cxx11-note@#dr990-deleted {{'C' has been explicitly marked deleted here}}
+ // since-cxx11-note@#cwg990-deleted {{'C' has been explicitly marked deleted here}}
struct D {
D();
diff --git a/clang/www/make_cxx_dr_status b/clang/www/make_cxx_dr_status
index 7183e1a6d2be1a..7c0cf77a1524f7 100755
--- a/clang/www/make_cxx_dr_status
+++ b/clang/www/make_cxx_dr_status
@@ -32,7 +32,7 @@ def parse(dr):
return DR(section, issue, url, status, title)
def collect_tests():
- status_re = re.compile(r'\bdr([0-9]+): (.*)')
+ status_re = re.compile(r'\bcwg([0-9]+): (.*)')
status_map = {}
for test_cpp in os.listdir(dr_test_dir):
if not test_cpp.endswith('.cpp'):
@@ -42,12 +42,12 @@ def collect_tests():
for match in re.finditer(status_re, open(test_cpp, 'r').read()):
dr_number = int(match.group(1))
if dr_number in status_map:
- print("error: Comment for dr{} encountered more than once. Duplicate found in {}".format(dr_number, test_cpp))
+ print("error: Comment for cwg{} encountered more than once. Duplicate found in {}".format(dr_number, test_cpp))
sys.exit(1)
status_map[dr_number] = match.group(2)
found_any = True
if not found_any:
- print("warning:%s: no '// dr123: foo' comments in this file" % test_cpp, file=sys.stderr)
+ print("warning:%s: no '// cwg123: foo' comments in this file" % test_cpp, file=sys.stderr)
return status_map
def get_issues(path):
More information about the cfe-commits
mailing list