rsmith added inline comments.
================ Comment at: clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:31 IP<&tl> ip7; // expected-error{{non-type template argument of type 'int *' is not a constant expression}} +IP<(int*)1> ip8; // expected-error {{non-type template argument does not refer to any declaration}} ---------------- erichkeane wrote: > shafik wrote: > > shafik wrote: > > > It looks like in C++17 mode we catch this case: > > > https://godbolt.org/z/s43oE5qWE > > Another case to check for: > > > > ``` > > IP<(int*)(1-1)> ip9; > > ``` > > > > In C++11 the wording use to allow `integer constant expressions` > The new diagnostic here is unfortunate. That 'does not refer to any > declaration' doesn't really let me know that it is illegal because that isn't > a NPE. > > The 'treat it as a null ptr' here is obviously awful, but I find myself > wondering if we can do better on this diagnostic trivially enough? > It looks like in C++17 mode we catch this case: > https://godbolt.org/z/s43oE5qWE That's diagnosing the cast, not the template argument value. You can get around the cast diagnostic by forcing constant folding with a `__builtin_constant_p` conditional ([example](https://godbolt.org/z/8f8WWTGeM)). Then we diagnose as > <source>:7:4: error: non-type template argument refers to subobject '(int *)1' ... which seems like a worse diagnostic than the C++11 one, because it's not even true. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D134928/new/ https://reviews.llvm.org/D134928 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits