<div dir="ltr">Fixed in r325540. Sorry about that.</div><div class="gmail_extra"><br><div class="gmail_quote">On 19 February 2018 at 14:44, Galina Kistanova via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span style="font-family:arial,helvetica,sans-serif">Hello Richard,<br><br>One of modified tests broke the next builder:<br><a href="http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/8006" target="_blank">http://lab.llvm.org:8011/<wbr>builders/llvm-clang-x86_64-<wbr>expensive-checks-win/builds/<wbr>8006</a><br><br>Failing Tests (1):<br>    Clang :: CXX/drs/dr6xx.cpp<br><br>Please have a look?<br><br>Thanks<br><br>Galina<br><br></span><br></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Feb 19, 2018 at 1:05 AM, Richard Smith via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rsmith<br>
Date: Mon Feb 19 01:05:48 2018<br>
New Revision: 325475<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=325475&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject?rev=325475&view=rev</a><br>
Log:<br>
[cxx_dr_status] Tests for CWG issues 641-687.<br>
<br>
Modified:<br>
    cfe/trunk/test/CXX/drs/dr6xx.c<wbr>pp<br>
    cfe/trunk/www/<a href="http://cxx_dr_status.ht">cxx_dr_status.ht</a><wbr>ml<br>
<br>
Modified: cfe/trunk/test/CXX/drs/dr6xx.c<wbr>pp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/drs/dr6xx.cpp?rev=325475&r1=325474&r2=325475&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/test/CXX/drs/<wbr>dr6xx.cpp?rev=325475&r1=325474<wbr>&r2=325475&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/CXX/drs/dr6xx.c<wbr>pp (original)<br>
+++ cfe/trunk/test/CXX/drs/dr6xx.c<wbr>pp Mon Feb 19 01:05:48 2018<br>
@@ -1,7 +1,8 @@<br>
-// RUN: %clang_cc1 -std=c++98 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors<br>
-// RUN: %clang_cc1 -std=c++11 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors<br>
-// RUN: %clang_cc1 -std=c++14 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors<br>
-// RUN: %clang_cc1 -std=c++1z %s -verify -fexceptions -fcxx-exceptions -pedantic-errors<br>
+// RUN: %clang_cc1 -std=c++98 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -fno-spell-checking<br>
+// RUN: %clang_cc1 -std=c++11 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -fno-spell-checking<br>
+// RUN: %clang_cc1 -std=c++14 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -fno-spell-checking<br>
+// RUN: %clang_cc1 -std=c++17 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -fno-spell-checking<br>
+// RUN: %clang_cc1 -std=c++2a %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -fno-spell-checking<br>
<br>
 namespace std { struct type_info {}; }<br>
<br>
@@ -354,6 +355,672 @@ namespace dr639 { // dr639: yes<br>
   }<br>
 }<br>
<br>
+namespace dr641 { // dr641: yes<br>
+  namespace std_example {<br>
+    struct abc;<br>
+<br>
+    struct xyz {<br>
+      xyz(); // expected-note 0-1{{candidate}}<br>
+      xyz(xyz &); // expected-note 0-1{{candidate}}<br>
+<br>
+      operator xyz &() = delete; // expected-error 0-1{{extension}} expected-warning {{will never be used}}<br>
+      operator abc &() = delete; // expected-error 0-1{{extension}}<br>
+    };<br>
+<br>
+    struct abc : xyz {};<br>
+<br>
+    template<typename T><br>
+    void use(T &); // expected-note {{expects an l-value}}<br>
+    void test() {<br>
+      use<xyz>(xyz()); // expected-error {{no match}}<br>
+      use<const xyz>(xyz());<br>
+#if __cplusplus < 201103L<br>
+      // expected-error-re@-2 {{no viable constructor copying parameter of type '{{.*}}xyz'}}<br>
+#endif<br>
+    }<br>
+  }<br>
+<br>
+  template<typename T> struct error { typedef typename T::error type; };<br>
+<br>
+  struct A {<br>
+    template<typename T, typename error<T>::type = 0> operator T() const; // expected-error 0-1{{extension}}<br>
+  };<br>
+  A a;<br>
+  void f(A&); // expected-note 2{{candidate}}<br>
+  void g(const A ca) {<br>
+    f(A()); // expected-error {{no match}}<br>
+    f(ca); // expected-error {{no match}}<br>
+    (void)A();<br>
+    (void)ca;<br>
+  }<br>
+}<br>
+<br>
+namespace dr642 { // dr642: yes<br>
+  void f() {<br>
+    const int i = 2;<br>
+    {<br>
+      char i[i];<br>
+      _Static_assert(sizeof(i) == 2, ""); // expected-error {{C11}}<br>
+    }<br>
+  }<br>
+<br>
+  struct s { int a; };<br>
+  void g(int s) {<br>
+    struct s *p = new struct s;<br>
+    p->a = s;<br>
+  }<br>
+}<br>
+<br>
+#if __cplusplus >= 201103L<br>
+namespace dr643 { // dr643: yes<br>
+  struct A {<br>
+    int x;<br>
+    auto f() -> decltype(this->x);<br>
+    auto f(A &a) -> decltype(a.x);<br>
+    auto g() -> decltype(x);<br>
+    auto h() -> decltype(this->y); // expected-error {{no member named 'y'}}<br>
+    auto h(A &a) -> decltype(a.y); // expected-error {{no member named 'y'}}<br>
+    auto i() -> decltype(y); // expected-error {{undeclared identifier 'y'}}<br>
+    int y;<br>
+  };<br>
+}<br>
+#endif<br>
+<br>
+#if __cplusplus >= 201103L<br>
+namespace dr644 { // dr644: partial<br>
+  struct A {<br>
+    A() = default;<br>
+    int x, y;<br>
+  };<br>
+  static_assert(__is_literal_typ<wbr>e(A), "");<br>
+<br>
+  struct B : A {};<br>
+  static_assert(__is_literal_typ<wbr>e(B), "");<br>
+<br>
+  struct C : virtual A {};<br>
+  static_assert(!__is_literal_ty<wbr>pe(C), "");<br>
+<br>
+  struct D { C c; };<br>
+  static_assert(!__is_literal_ty<wbr>pe(D), "");<br>
+<br>
+  // FIXME: According to DR644, E<C> is a literal type despite having virtual<br>
+  // base classes. This appears to be a wording defect.<br>
+  template<typename T><br>
+  struct E : T {<br>
+    constexpr E() = default;<br>
+  };<br>
+  static_assert(!__is_literal_ty<wbr>pe(E<C>), "");<br>
+}<br>
+#endif<br>
+<br>
+// dr645 increases permission to optimize; it's not clear that it's possible to<br>
+// test for this.<br>
+// dr645: na<br>
+<br>
+#if __cplusplus >= 201103L<br>
+namespace dr646 { // dr646: sup 981<br>
+  struct A {<br>
+    constexpr A(const A&) = default; // ok<br>
+  };<br>
+<br>
+  struct B {<br>
+    constexpr B() {}<br>
+    B(B&);<br>
+  };<br>
+  constexpr B b = {}; // ok<br>
+}<br>
+#endif<br>
+<br>
+#if __cplusplus >= 201103L<br>
+namespace dr647 { // dr647: yes<br>
+  // This is partially superseded by dr1358.<br>
+  struct A {<br>
+    constexpr virtual void f() const;<br>
+    constexpr virtual void g() const {} // expected-error {{virtual function cannot be constexpr}}<br>
+  };<br>
+<br>
+  struct X { virtual void f() const; }; // expected-note {{overridden}}<br>
+  struct B : X {<br>
+    constexpr void f() const {} // expected-error {{virtual function cannot be constexpr}}<br>
+  };<br>
+<br>
+  struct NonLiteral { NonLiteral() {} }; // expected-note {{not an aggregate and has no constexpr constructors}}<br>
+<br>
+  struct C {<br>
+    constexpr C(NonLiteral);<br>
+    constexpr C(NonLiteral, int) {} // expected-error {{not a literal type}}<br>
+    constexpr C() try {} catch (...) {} // expected-error {{function try block}}<br>
+  };<br>
+<br>
+  struct D {<br>
+    operator int() const;<br>
+    constexpr D(int) {}<br>
+    D(float); // expected-note 2{{declared here}}<br>
+  };<br>
+  constexpr int get();<br>
+  struct E {<br>
+    int n;<br>
+    D d;<br>
+<br>
+    // FIXME: We should diagnose this, as the conversion function is not<br>
+    // constexpr. However, that part of this issue is supreseded by dr1364 and<br>
+    // others; no diagnostic is required for this any more.<br>
+    constexpr E()<br>
+        : n(D(0)),<br>
+          d(0) {}<br>
+<br>
+    constexpr E(int) // expected-error {{never produces a constant expression}}<br>
+        : n(0),<br>
+          d(0.0f) {} // expected-note {{non-constexpr constructor}}<br>
+    constexpr E(float f) // expected-error {{never produces a constant expression}}<br>
+        : n(get()),<br>
+          d(D(0) + f) {} // expected-note {{non-constexpr constructor}}<br>
+  };<br>
+}<br>
+#endif<br>
+<br>
+#if __cplusplus >= 201103L<br>
+namespace dr648 { // dr648: yes<br>
+  int f();<br>
+  constexpr int a = (true ? 1 : f());<br>
+  constexpr int b = false && f();<br>
+  constexpr int c = true || f();<br>
+}<br>
+#endif<br>
+<br>
+#if __cplusplus >= 201103L<br>
+namespace dr649 { // dr649: yes<br>
+  alignas(0x20000000) int n; // expected-error {{requested alignment}}<br>
+  struct alignas(0x20000000) X {}; // expected-error {{requested alignment}}<br>
+  struct Y { int n alignas(0x20000000); }; // expected-error {{requested alignment}}<br>
+  struct alignas(256) Z {};<br>
+  // This part is superseded by dr2130 and eventually by aligned allocation support.<br>
+  auto *p = new Z;<br>
+}<br>
+#endif<br>
+<br>
+// dr650 FIXME: add codegen test<br>
+<br>
+#if __cplusplus >= 201103L<br>
+namespace dr651 { // dr651: yes<br>
+  struct X {<br>
+    virtual X &f();<br>
+  };<br>
+  struct Y : X {<br>
+    Y &f();<br>
+  };<br>
+  using T = decltype(((X&&)Y()).f());<br>
+  using T = X &;<br>
+}<br>
+#endif<br>
+<br>
+#if __cplusplus >= 201103L<br>
+namespace dr652 { // dr652: yes<br>
+  constexpr int n = 1.2 * 3.4;<br>
+  static_assert(n == 4, "");<br>
+}<br>
+#endif<br>
+<br>
+// dr653 FIXME: add codegen test<br>
+<br>
+#if __cplusplus >= 201103L<br>
+namespace dr654 { // dr654: yes<br>
+  void f() {<br>
+    if (nullptr) {} // expected-warning {{implicit conversion of nullptr constant to 'bool'}}<br>
+    bool b = nullptr; // expected-warning {{implicit conversion of nullptr constant to 'bool'}}<br>
+    if (nullptr == 0) {}<br>
+    if (nullptr != 0) {}<br>
+    if (nullptr <= 0) {} // expected-error {{invalid operands}}<br>
+    if (nullptr == 1) {} // expected-error {{invalid operands}}<br>
+    if (!nullptr) {} // expected-warning {{implicit conversion of nullptr constant to 'bool'}}<br>
+    decltype(nullptr) n = 0;<br>
+    static_cast<int>(nullptr); // expected-error {{not allowed}}<br>
+    (void)static_cast<decltype(nul<wbr>lptr)>(0);<br>
+    static_cast<decltype(nullptr)><wbr>(1); // expected-error {{not allowed}}<br>
+    void(true ? nullptr : 0);<br>
+    void(true ? 0 : nullptr);<br>
+  }<br>
+}<br>
+#endif<br>
+<br>
+namespace dr655 { // dr655: yes<br>
+  struct A { A(int); }; // expected-note 2-3{{not viable}}<br>
+  struct B : A {<br>
+    A a;<br>
+    B();<br>
+    B(int) : B() {} // expected-error 0-1 {{C++11}}<br>
+    B(int*) : A() {} // expected-error {{no matching constructor}}<br>
+  };<br>
+}<br>
+<br>
+namespace dr656 { // dr656: yes<br>
+  struct A { A(const A&) = delete; }; // expected-error 0-1 {{C++11}}<br>
+  struct B : A {};<br>
+  struct X { operator B(); } x;<br>
+  const A &r = x;<br>
+  struct Y : private A { // expected-note 2{{here}} expected-note 2{{candidate}}<br>
+    operator B() volatile;<br>
+  };<br>
+  extern Y y;<br>
+  extern volatile Y vy;<br>
+  // Conversion not considered due to reference-related types.<br>
+  const A &s = y; // expected-error {{private base class}}<br>
+  const A &t = vy; // expected-error {{drops 'volatile'}}<br>
+<br>
+  struct C { operator struct D(); } c;<br>
+  struct D : C {};<br>
+  const D &d = c; // ok, D not reference-related to C<br>
+<br>
+  template<typename T> void accept(T); // expected-note {{candidate}}<br>
+  template<typename T> void accept(...) = delete; // expected-error 0-1 {{C++11}} expected-note {{candidate}}<br>
+  void f() {<br>
+    accept<const A&>(x);<br>
+    accept<const A&>(y); // expected-error {{private base class}}<br>
+    accept<const A&>(vy); // expected-error {{call to deleted}} expected-error {{no matching constructor}}<br>
+    accept<const D&>(c);<br>
+  }<br>
+}<br>
+<br>
+namespace dr657 { // dr657: partial<br>
+  struct Abs { virtual void x() = 0; };<br>
+  struct Der : public Abs { virtual void x(); };<br>
+<br>
+  struct Cnvt { template<typename F> Cnvt(F); };<br>
+<br>
+  void foo(Cnvt a);<br>
+  void foo(Abs &a);<br>
+  void f(Abs *a) { foo(*a); }<br>
+<br>
+  void bar(Abs &a);<br>
+  template<typename T> void bar(T);<br>
+  void g(Abs *a) { bar(*a); }<br>
+<br>
+  // FIXME: The following examples demonstrate that we might be accepting the<br>
+  // above cases for the wrong reason.<br>
+<br>
+  // FIXME: We should reject this.<br>
+  struct C { C(Abs) {} };<br>
+  // FIXME: We should reject this.<br>
+  struct Q { operator Abs() { __builtin_unreachable(); } } q;<br>
+#if __cplusplus >= 201703L<br>
+  // FIXME: We should *definitely* reject this.<br>
+  C c = Q().operator Abs();<br>
+#endif<br>
+<br>
+  template<typename F> struct Cnvt2 { Cnvt2(F); typedef int type; };<br>
+<br>
+  // FIXME: We should reject this.<br>
+  void baz(Abs &a);<br>
+  template<typename T> typename Cnvt2<T>::type baz(T);<br>
+  void h(Abs *a) { baz(*a); }<br>
+<br>
+  // FIXME: We should reject this too.<br>
+  Cnvt2<Abs>::type err;<br>
+}<br>
+<br>
+// dr658 FIXME: add codegen test<br>
+<br>
+#if __cplusplus >= 201103L<br>
+namespace dr659 { // dr659: yes<br>
+  static_assert(alignof(char) == alignof(char&), "");<br>
+  static_assert(alignof(int) == alignof(int&), "");<br>
+  int n = alignof(int(&)()); // expected-error {{application of 'alignof' to a function type}}<br>
+  struct A; // expected-note {{forward}}<br>
+  int m = alignof(A&); // expected-error {{application of 'alignof' to an incomplete type}}<br>
+}<br>
+#endif<br>
+<br>
+#if __cplusplus >= 201103L<br>
+namespace dr660 { // dr660: yes<br>
+  enum : int { a };<br>
+  enum class { b }; // expected-error {{requires a name}}<br>
+  auto x = a;<br>
+<br>
+  struct X {<br>
+    enum : int { a };<br>
+    enum class { b }; // expected-error {{requires a name}}<br>
+  };<br>
+  auto y = X::a;<br>
+}<br>
+#endif<br>
+<br>
+// dr661 FIXME: add codegen test<br>
+<br>
+namespace dr662 { // dr662: yes<br>
+  template <typename T> void f(T t) {<br>
+    T &tr = t;<br>
+    T *tp = &t; // expected-error {{pointer to a reference}}<br>
+#if __cplusplus >= 201103L<br>
+    auto *ap = &t;<br>
+#endif<br>
+  }<br>
+  void g(int n) { f<int&>(n); } // expected-note {{instantiation of}}<br>
+}<br>
+<br>
+namespace dr663 { // dr663: yes c++11<br>
+  int Ð ÐŽ = 123;<br>
+#if __cplusplus < 201103L<br>
+  // expected-error@-2 {{non-ASCII}}<br>
+#endif<br>
+}<br>
+<br>
+#if __cplusplus >= 201103L<br>
+namespace dr664 { // dr664: yes<br>
+  struct A { A(const A&) = delete; };<br>
+  A &&f(A &&a, int n) {<br>
+    if (n)<br>
+      return f(static_cast<A&&>(a), n - 1);<br>
+    return static_cast<A&&>(a);<br>
+  }<br>
+}<br>
+#endif<br>
+<br>
+namespace dr665 { // dr665: yes<br>
+  struct A { virtual ~A(); };<br>
+  struct B : A {} *b;<br>
+  struct C : private A {} *c; // expected-note {{here}}<br>
+  struct D : B, C {} *d;<br>
+<br>
+  struct VB : virtual A {} *vb;<br>
+  struct VC : private virtual A {} *vc; // expected-note {{here}}<br>
+  struct VD : VB, VC {} *vd;<br>
+<br>
+  void f() {<br>
+    (void)dynamic_cast<A*>(b);<br>
+    (void)dynamic_cast<A*>(c); // expected-error {{private}}<br>
+    (void)dynamic_cast<A*>(d); // expected-error {{ambiguous}}<br>
+    (void)dynamic_cast<A*>(vb);<br>
+    (void)dynamic_cast<A*>(vc); // expected-error {{private}}, even though it could be valid at runtime<br>
+    (void)dynamic_cast<A*>(vd);<br>
+  }<br>
+}<br>
+<br>
+namespace dr666 { // dr666: yes<br>
+  struct P { friend P operator*(P, P); P(int); } p(0);<br>
+<br>
+  template<int> int f();<br>
+  template<typename T> int f() {<br>
+    T::type *p = 0; // expected-error {{missing 'typename'}}<br>
+    int a(T::type); // expected-error {{missing 'typename'}}<br>
+    return f<T::type>(); // expected-error {{missing 'typename'}}<br>
+  }<br>
+  struct X { static const int type = 0; };<br>
+  struct Y { typedef int type; };<br>
+  int a = f<X>();<br>
+  int b = f<Y>(); // expected-note {{instantiation of}}<br>
+}<br>
+<br>
+// Triviality is entirely different in C++98.<br>
+#if __cplusplus >= 201103L<br>
+namespace dr667 { // dr667: yes<br>
+  struct A {<br>
+    A() = default;<br>
+    int &r;<br>
+  };<br>
+  static_assert(!__is_trivially_<wbr>constructible(A), "");<br>
+<br>
+  struct B { ~B() = delete; };<br>
+  union C { B b; };<br>
+  static_assert(!__is_trivially_<wbr>destructible(C), "");<br>
+<br>
+  struct D { D(const D&) = delete; };<br>
+  struct E : D {};<br>
+  static_assert(!__is_trivially_<wbr>constructible(E, const E&), "");<br>
+<br>
+  struct F { F &operator=(F&&) = delete; };<br>
+  struct G : F {};<br>
+  static_assert(!__is_trivially_<wbr>assignable(G, G&&), "");<br>
+}<br>
+#endif<br>
+<br>
+// dr668 FIXME: add codegen test<br>
+<br>
+#if __cplusplus >= 201103L<br>
+namespace dr669 { // dr669: yes<br>
+  void f() {<br>
+    int n;<br>
+    using T = decltype(n);<br>
+    using T = int;<br>
+    using U = decltype((n));<br>
+    using U = int &;<br>
+<br>
+    [=] {<br>
+      using V = decltype(n);<br>
+      using V = int;<br>
+      using W = decltype((n));<br>
+      using W = const int&;<br>
+    } ();<br>
+<br>
+    struct X {<br>
+      int n;<br>
+      void f() const {<br>
+        using X = decltype(n);<br>
+        using X = int;<br>
+        using Y = decltype((n));<br>
+        using Y = const int&;<br>
+      }<br>
+    };<br>
+  }<br>
+}<br>
+#endif<br>
+<br>
+namespace dr671 { // dr671: yes<br>
+  enum class E { e }; // expected-error 0-1 {{C++11}}<br>
+  E e = static_cast<E>(0);<br>
+  int n = static_cast<int>(E::e); // expected-error 0-1 {{C++11}}<br>
+  int m = static_cast<int>(e); // expected-error 0-1 {{C++11}}<br>
+}<br>
+<br>
+// dr672 FIXME: add codegen test<br>
+<br>
+namespace dr673 { // dr673: yes<br>
+  template<typename> struct X { static const int n = 0; };<br>
+<br>
+  class A {<br>
+    friend class B *f();<br>
+    class C *f();<br>
+    void f(class D *);<br>
+    enum { e = X<struct E>::n };<br>
+    void g() { extern struct F *p; }<br>
+  };<br>
+  B *b;<br>
+  C *c;<br>
+  D *d;<br>
+  E *e;<br>
+  F *f; // expected-error {{unknown type name}}<br>
+}<br>
+<br>
+namespace dr674 { // dr674: no<br>
+  template<typename T> int f(T);<br>
+<br>
+  int g(int);<br>
+  template<typename T> int g(T);<br>
+<br>
+  int h(int);<br>
+  template<typename T> int h(T);<br>
+<br>
+  class X {<br>
+    // FIXME: This should deduce dr674::f<int>.<br>
+    friend int dr674::f(int); // expected-error {{does not match any}}<br>
+    friend int dr674::g(int);<br>
+    friend int dr674::h<>(int);<br>
+    int n;<br>
+  };<br>
+<br>
+  template<typename T> int f(T) { return X().n; }<br>
+  int g(int) { return X().n; }<br>
+  template<typename T> int g(T) { return X().n; }<br>
+  int h(int) { return X().n; }<br>
+  template<typename T> int h(T) { return X().n; }<br>
+<br>
+  template int f(int);<br>
+  template int g(int);<br>
+  template int h(int);<br>
+}<br>
+<br>
+namespace dr675 { // dr675: dup 739<br>
+  template<typename T> struct A { T n : 1; };<br>
+#if __cplusplus >= 201103L<br>
+  static_assert(A<char>{1}.n < 0, "");<br>
+  static_assert(A<int>{1}.n < 0, "");<br>
+  static_assert(A<long long>{1}.n < 0, "");<br>
+#endif<br>
+}<br>
+<br>
+// dr676: na<br>
+<br>
+namespace dr677 { // dr677: no<br>
+  struct A {<br>
+    void *operator new(__SIZE_TYPE__);<br>
+    void operator delete(void*) = delete; // expected-error 0-1{{C++11}} expected-note {{deleted}}<br>
+  };<br>
+  struct B {<br>
+    void *operator new(__SIZE_TYPE__);<br>
+    void operator delete(void*) = delete; // expected-error 0-1{{C++11}} expected-note 2{{deleted}}<br>
+    virtual ~B();<br>
+  };<br>
+  void f(A *p) { delete p; } // expected-error {{deleted}}<br>
+  // FIXME: This appears to be valid; we shouldn't even be looking up the 'operator delete' here.<br>
+  void f(B *p) { delete p; } // expected-error {{deleted}}<br>
+  B::~B() {} // expected-error {{deleted}}<br>
+}<br>
+<br>
+// dr678 FIXME: check that the modules ODR check catches this<br>
+<br>
+namespace dr679 { // dr679: yes<br>
+  struct X {};<br>
+  template<int> void operator+(X, X);<br>
+  template<> void operator+<0>(X, X) {} // expected-note {{previous}}<br>
+  template<> void operator+<0>(X, X) {} // expected-error {{redefinition}}<br>
+}<br>
+<br>
+// dr680: na<br>
+<br>
+#if __cplusplus >= 201103L<br>
+namespace dr681 { // dr681: partial<br>
+  auto *a() -> int; // expected-error {{must specify return type 'auto', not 'auto *'}}<br>
+  auto (*b)() -> int;<br>
+  // FIXME: The errors here aren't great.<br>
+  auto (*c()) -> int; // expected-error {{expected function body}}<br>
+  auto ((*d)()) -> int; // expected-error {{expected ';'}} expected-error {{requires an initializer}}<br>
+<br>
+  // FIXME: This is definitely wrong. This should be<br>
+  //   "function of () returning pointer to function of () returning int"<br>
+  // not a function with a deduced return type.<br>
+  auto (*e())() -> int; // expected-error 0-1{{C++14}}<br>
+<br>
+  auto f() -> int (*)();<br>
+  auto g() -> auto (*)() -> int;<br>
+}<br>
+#endif<br>
+<br>
+#if __cplusplus >= 201103L<br>
+namespace dr683 { // dr683: yes<br>
+  struct A {<br>
+    A() = default;<br>
+    A(const A&) = default;<br>
+    A(A&);<br>
+  };<br>
+  static_assert(__is_trivially_c<wbr>onstructible(A, const A&), "");<br>
+  static_assert(!__is_trivially_<wbr>constructible(A, A&), "");<br>
+  static_assert(!__is_trivial(A)<wbr>, "");<br>
+<br>
+  struct B : A {};<br>
+  static_assert(__is_trivially_c<wbr>onstructible(B, const B&), "");<br>
+  static_assert(__is_trivially_c<wbr>onstructible(B, B&), "");<br>
+  static_assert(__is_trivial(B), "");<br>
+}<br>
+#endif<br>
+<br>
+#if __cplusplus >= 201103L<br>
+namespace dr684 { // dr684: sup 1454<br>
+  void f() {<br>
+    int a; // expected-note {{here}}<br>
+    constexpr int *p = &a; // expected-error {{constant expression}} expected-note {{pointer to 'a'}}<br>
+  }<br>
+}<br>
+#endif<br>
+<br>
+#if __cplusplus >= 201103L<br>
+namespace dr685 { // dr685: yes<br>
+  enum E : long { e };<br>
+  void f(int);<br>
+  int f(long);<br>
+  int a = f(e);<br>
+<br>
+  enum G : short { g };<br>
+  int h(short);<br>
+  void h(long);<br>
+  int b = h(g);<br>
+<br>
+  int i(int);<br>
+  void i(long);<br>
+  int c = i(g);<br>
+<br>
+  int j(unsigned int); // expected-note {{candidate}}<br>
+  void j(long); // expected-note {{candidate}}<br>
+  int d = j(g); // expected-error {{ambiguous}}<br>
+<br>
+  int k(short); // expected-note {{candidate}}<br>
+  void k(int); // expected-note {{candidate}}<br>
+  int x = k(g); // expected-error {{ambiguous}}<br>
+}<br>
+#endif<br>
+<br>
+namespace dr686 { // dr686: yes<br>
+  void f() {<br>
+    (void)dynamic_cast<struct A*>(0); // expected-error {{incomplete}} expected-note {{forward}}<br>
+    (void)dynamic_cast<struct A{}*>(0); // expected-error {{cannot be defined in a type specifier}}<br>
+    (void)typeid(struct B*);<br>
+    (void)typeid(struct B{}*); // expected-error {{cannot be defined in a type specifier}}<br>
+    (void)static_cast<struct C*>(0);<br>
+    (void)static_cast<struct C{}*>(0); // expected-error {{cannot be defined in a type specifier}}<br>
+    (void)reinterpret_cast<struct D*>(0);<br>
+    (void)reinterpret_cast<struct D{}*>(0); // expected-error {{cannot be defined in a type specifier}}<br>
+    (void)const_cast<struct E*>(0); // expected-error {{not allowed}}<br>
+    (void)const_cast<struct E{}*>(0); // expected-error {{cannot be defined in a type specifier}}<br>
+    (void)sizeof(struct F*);<br>
+    (void)sizeof(struct F{}*); // expected-error {{cannot be defined in a type specifier}}<br>
+    (void)new struct G*;<br>
+    (void)new struct G{}*; // expected-error {{cannot be defined in a type specifier}}<br>
+#if __cplusplus >= 201103L<br>
+    (void)alignof(struct H*);<br>
+    (void)alignof(struct H{}*); // expected-error {{cannot be defined in a type specifier}}<br>
+#endif<br>
+    (void)(struct I*)0;<br>
+    (void)(struct I{}*)0; // expected-error {{cannot be defined in a type specifier}}<br>
+    if (struct J *p = 0) {}<br>
+    if (struct J {} *p = 0) {} // expected-error {{cannot be defined in a condition}}<br>
+    for (struct K *p = 0; struct L *q = 0; ) {}<br>
+    for (struct K {} *p = 0; struct L {} *q = 0; ) {} // expected-error {{'L' cannot be defined in a condition}}<br>
+#if __cplusplus >= 201103L<br>
+    using M = struct {};<br>
+#endif<br>
+    struct N {<br>
+      operator struct O{}(){}; // expected-error {{cannot be defined in a type specifier}}<br>
+    };<br>
+    try {}<br>
+    catch (struct P *) {} // expected-error {{incomplete}} expected-note {{forward}}<br>
+    catch (struct P {} *) {} // expected-error {{cannot be defined in a type specifier}}<br>
+#if __cplusplus < 201703L<br>
+    void g() throw(struct Q); // expected-error {{incomplete}} expected-note {{forward}}<br>
+    void h() throw(struct Q {}); // expected-error {{cannot be defined in a type specifier}}<br>
+#endif<br>
+  }<br>
+  template<struct R *> struct X;<br>
+  template<struct R {} *> struct Y; // expected-error {{cannot be defined in a type specifier}}<br>
+}<br>
+<br>
+namespace dr687 { // dr687 still open<br>
+  template<typename T> void f(T a) {<br>
+    // FIXME: This is valid in C++20.<br>
+    g<int>(a); // expected-error {{undeclared}} expected-error {{'('}}<br>
+<br>
+    // This is not.<br>
+    template g<int>(a); // expected-error {{expected expression}}<br>
+  }<br>
+}<br>
+<br>
 namespace dr692 { // dr692: no<br>
   namespace temp_func_order_example2 {<br>
     template <typename T, typename U> struct A {};<br>
<br>
Modified: cfe/trunk/www/<a href="http://cxx_dr_status.ht">cxx_dr_status.ht</a><wbr>ml<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/www/cxx_dr_status.html?rev=325475&r1=325474&r2=325475&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/www/cxx_dr_sta<wbr>tus.html?rev=325475&r1=325474&<wbr>r2=325475&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/www/<a href="http://cxx_dr_status.ht">cxx_dr_status.ht</a><wbr>ml (original)<br>
+++ cfe/trunk/www/<a href="http://cxx_dr_status.ht">cxx_dr_status.ht</a><wbr>ml Mon Feb 19 01:05:48 2018<br>
@@ -3889,55 +3889,55 @@ and <I>POD class</I></td><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#641" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#641</a>">641</a></td><br>
     <td>CD2</td><br>
     <td>Overload resolution and conversion-to-same-type operators</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="642"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#642" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#642</a>">642</a></td><br>
     <td>CD2</td><br>
     <td>Definition and use of &#8220;block scope&#8221; and &#8220;local scope&#8221;</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="643"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#643" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_closed<wbr>.html#643</a>">643</a></td><br>
     <td>NAD</td><br>
     <td>Use of <TT>decltype</TT> in a class <I>member-specification</I></t<wbr>d><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="644"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#644" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#644</a>">644</a></td><br>
     <td>CD1</td><br>
     <td>Should a trivial class type be a literal type?</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="partial" align="center">Partial</td><br>
   </tr><br>
   <tr id="645"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#645" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#645</a>">645</a></td><br>
     <td>CD2</td><br>
     <td>Are bit-field and non-bit-field members layout compatible?</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="na" align="center">N/A</td><br>
   </tr><br>
   <tr id="646"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#646" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_closed<wbr>.html#646</a>">646</a></td><br>
     <td>NAD</td><br>
     <td>Can a class with a constexpr copy constructor be a literal type?</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="none" align="center">Superseded by <a href="#981">981</a></td><br>
   </tr><br>
   <tr id="647"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#647" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#647</a>">647</a></td><br>
     <td>CD1</td><br>
     <td>Non-constexpr instances of constexpr constructor templates</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="648"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#648" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#648</a>">648</a></td><br>
     <td>CD1</td><br>
     <td>Constant expressions in constexpr initializers</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="649"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#649" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#649</a>">649</a></td><br>
     <td>CD1</td><br>
     <td>Optionally ill-formed extended alignment requests</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="650"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#650" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#650</a>">650</a></td><br>
@@ -3949,13 +3949,13 @@ and <I>POD class</I></td><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#651" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#651</a>">651</a></td><br>
     <td>CD1</td><br>
     <td>Problems in <TT>decltype</TT> specification and examples</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="652"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#652" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#652</a>">652</a></td><br>
     <td>CD2</td><br>
     <td>Compile-time evaluation of floating-point expressions</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="653"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#653" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#653</a>">653</a></td><br>
@@ -3967,25 +3967,25 @@ and <I>POD class</I></td><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#654" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#654</a>">654</a></td><br>
     <td>CD1</td><br>
     <td>Conversions to and from <TT>nullptr_t</TT></td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="655"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#655" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#655</a>">655</a></td><br>
     <td>C++11</td><br>
     <td>Initialization not specified for forwarding constructors</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="656"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#656" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#656</a>">656</a></td><br>
     <td>CD2</td><br>
     <td>Direct binding to the result of a conversion operator</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="657"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#657" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#657</a>">657</a></td><br>
     <td>CD2</td><br>
     <td>Abstract class parameter in synthesized declaration</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="partial" align="center">Partial</td><br>
   </tr><br>
   <tr id="658"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#658" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#658</a>">658</a></td><br>
@@ -3997,13 +3997,13 @@ and <I>POD class</I></td><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#659" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#659</a>">659</a></td><br>
     <td>CD1</td><br>
     <td>Alignment of function types</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="660"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#660" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#660</a>">660</a></td><br>
     <td>CD1</td><br>
     <td>Unnamed scoped enumerations</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="661"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#661" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#661</a>">661</a></td><br>
@@ -4015,37 +4015,37 @@ and <I>POD class</I></td><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#662" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_closed<wbr>.html#662</a>">662</a></td><br>
     <td>NAD</td><br>
     <td>Forming a pointer to a reference type</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="663"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#663" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#663</a>">663</a></td><br>
     <td>CD1</td><br>
     <td>Valid Cyrillic identifier characters</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes (C++11 onwards)</td><br>
   </tr><br>
   <tr id="664"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#664" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#664</a>">664</a></td><br>
     <td>CD2</td><br>
     <td>Direct binding of references to non-class rvalue references</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="665"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#665" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#665</a>">665</a></td><br>
     <td>CD2</td><br>
     <td>Problems in the specification of <TT>dynamic_cast</TT></td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="666"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#666" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#666</a>">666</a></td><br>
     <td>CD1</td><br>
     <td>Dependent <I>qualified-id</I>s without the <TT>typename</TT> keyword</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="667"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#667" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#667</a>">667</a></td><br>
     <td>CD2</td><br>
     <td>Trivial special member functions that cannot be implicitly defined</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="668"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#668" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#668</a>">668</a></td><br>
@@ -4057,7 +4057,7 @@ and <I>POD class</I></td><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#669" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_closed<wbr>.html#669</a>">669</a></td><br>
     <td>NAD</td><br>
     <td>Confusing specification of the meaning of <TT>decltype</TT></td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr class="open" id="670"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#670" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_active<wbr>.html#670</a>">670</a></td><br>
@@ -4069,7 +4069,7 @@ and <I>POD class</I></td><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#671" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#671</a>">671</a></td><br>
     <td>CD1</td><br>
     <td>Explicit conversion from a scoped enumeration type to integral type</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="672"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#672" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#672</a>">672</a></td><br>
@@ -4081,31 +4081,31 @@ and <I>POD class</I></td><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#673" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_closed<wbr>.html#673</a>">673</a></td><br>
     <td>NAD</td><br>
     <td>Injection of names from <I>elaborated-type-specifier</<wbr>I>s in <TT>friend</TT> declarations</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="674"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#674" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#674</a>">674</a></td><br>
     <td>C++11</td><br>
     <td>&#8220;matching specialization&#8221; for a friend declaration</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="none" align="center">No</td><br>
   </tr><br>
   <tr id="675"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#675" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#675</a>">675</a></td><br>
     <td>CD3</td><br>
     <td>Signedness of bit-field with typedef or template parameter type</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="none" align="center">Duplicate of <a href="#739">739</a></td><br>
   </tr><br>
   <tr id="676"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#676" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#676</a>">676</a></td><br>
     <td>C++11</td><br>
     <td><I>static_assert-declarat<wbr>ion</I>s and general requirements for declarations</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="na" align="center">N/A</td><br>
   </tr><br>
   <tr id="677"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#677" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#677</a>">677</a></td><br>
     <td>CD1</td><br>
     <td>Deleted <TT>operator delete</TT> and virtual destructors</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="none" align="center">No</td><br>
   </tr><br>
   <tr id="678"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#678" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#678</a>">678</a></td><br>
@@ -4117,19 +4117,19 @@ and <I>POD class</I></td><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#679" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#679</a>">679</a></td><br>
     <td>CD1</td><br>
     <td>Equivalence of <I>template-id</I>s and operator function templates</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="680"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#680" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#680</a>">680</a></td><br>
     <td>CD2</td><br>
     <td>What is a move constructor?</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="na" align="center">N/A</td><br>
   </tr><br>
   <tr id="681"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#681" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#681</a>">681</a></td><br>
     <td>CD1</td><br>
     <td>Restrictions on declarators with late-specified return types</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="partial" align="center">Partial</td><br>
   </tr><br>
   <tr class="open" id="682"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#682" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_active<wbr>.html#682</a>">682</a></td><br>
@@ -4141,25 +4141,25 @@ and <I>POD class</I></td><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#683" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#683</a>">683</a></td><br>
     <td>CD1</td><br>
     <td>Requirements for trivial subobject special functions</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="684"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#684" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#684</a>">684</a></td><br>
     <td>CD1</td><br>
     <td>Constant expressions involving the address of an automatic variable</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="none" align="center">Superseded by <a href="#1454">1454</a></td><br>
   </tr><br>
   <tr id="685"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#685" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#685</a>">685</a></td><br>
     <td>CD2</td><br>
     <td>Integral promotion of enumeration ignores fixed underlying type</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr id="686"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#686" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_defect<wbr>s.html#686</a>">686</a></td><br>
     <td>CD1</td><br>
     <td>Type declarations/definitions in <I>type-specifier-seq</I>s and <I>type-id</I>s</td><br>
-    <td class="none" align="center">Unknown</td><br>
+    <td class="full" align="center">Yes</td><br>
   </tr><br>
   <tr class="open" id="687"><br>
     <td><a href="<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#687" rel="noreferrer" target="_blank">http://www.open-std.org/<wbr>jtc1/sc22/wg21/docs/cwg_closed<wbr>.html#687</a>">687</a></td><br>
<br>
<br>
______________________________<wbr>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>
</div></div><br>______________________________<wbr>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div>