Quuxplusone added inline comments.

================
Comment at: lib/AST/TypePrinter.cpp:173
+  // information about whether default template parameters were actually
+  // written.
+  switch (QT.getTypePtr()->getTypeClass()) {
----------------
FWIW, I don't understand this comment's terminology. "Whether default template 
parameters were actually written": should that say something like "whether a 
template parameter came from a default argument"?
And why are the `Pointer`, `VariableArray`, etc. cases here? What goes wrong if 
you remove them?


================
Comment at: test/SemaCXX/static-assert-cxx17.cpp:99
   static_assert((const X<typename T::T>[]){} == nullptr);
-  // expected-error@-1{{static_assert failed due to requirement '(X<int> 
const[0]){} == nullptr'}}
+  // expected-error@-1{{static_assert failed due to requirement '(const X<int> 
[0]){} == nullptr'}}
   static_assert(sizeof(X<decltype(X<typename T::T>().X<typename T::T>::~X())>) 
== 0);
----------------
(1) This cosmetic change is produced by the `case IncompleteArray:` that I 
questioned above, right? I'm surprised that the pretty-printed type changes 
from "east const" to "west const." But that's fine.

(2) Sorry I didn't notice before: surely where the message currently says `[0]` 
it should say `[]` instead! That's an existing bug in the pretty-printer, going 
back super far: https://godbolt.org/z/y9KzEq  So I guess it's not your 
responsibility to fix. But I hope there's a bug open about it somewhere?


================
Comment at: test/SemaCXX/static-assert-cxx17.cpp:103
+  static_assert(constexpr_return_false<typename T::T>());
+  // expected-error@-1{{static_assert failed due to requirement 
'constexpr_return_false<int>()'}}
 }
----------------
Please keep the old test case 

    static_assert(constexpr_return_false<typename T::T, typename T::U>());
    // expected-error@-1{{static_assert failed due to requirement 
'constexpr_return_false<int, float>()'}}

and then //add// this new test case. My understanding is that the old test case 
should still pass, even after your change.


================
Comment at: test/SemaCXX/static-assert-cxx17.cpp:109
+template <class T, class U>
+void foo7() {
+  static_assert(X<typename T::T, U>());
----------------
None of these new test cases actually involve the default template argument.

I'd like to see two test cases explicitly mimicking `vector`. (Warning: I 
didn't run this code!)
```
template<class> struct A {};
template<class, class = A<T>> struct V {};
template<class C> void testx() {
    static_assert(std::is_same<C*, void>::value, "");
    // expected-error@-1{{due to requirement 'std::is_same<V<int>*, 
void>::value'}}
}
template testx<V<int>>();
template<class> struct PMRA {};
template<class T> using PMRV = V<T, PMRA<T>>;
template<class C> void test() {
    static_assert(std::is_same<C*, void>::value, "");
    // expected-error@-1{{due to requirement 'std::is_same<V<int, PMRA<int>>*, 
void>::value'}}
    // expected-error@-2{{due to requirement 'std::is_same<PMRV<int>*, 
void>::value'}}
}
template testy<PMRV<int>>();
```
The `expected-error@-2` above is my fantasy world. I don't think it's possible 
to achieve in real life. :)


================
Comment at: test/SemaCXX/static-assert.cpp:130
 static_assert(std::is_same<decltype(std::is_const<const ExampleTypes::T>()), 
int>::value, "message");
-// expected-error@-1{{static_assert failed due to requirement 
'std::is_same<std::is_const<const int>, int>::value' "message"}}
+// expected-error@-1{{static_assert failed due to requirement 
'std::is_same<is_const<const int>, int>::value' "message"}}
 static_assert(std::is_const<decltype(ExampleTypes::T(3))>::value, "message");
----------------
Why did this output change?


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55933/new/

https://reviews.llvm.org/D55933



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to