[PATCH] D140996: [c++20] P1907R1: Support for generalized non-type template arguments of scalar type.

Shafik Yaghmour via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Feb 24 14:53:04 PST 2023


shafik added inline comments.


================
Comment at: clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:204
+#if __cplusplus == 201703L
+  // cxx17-error at -3 {{non-type template argument refers to subobject '(int *)1'}}
+#endif
----------------
Shouldn't this be an error b/c it is a temporary? What is `(int*)1` a subobject of?


================
Comment at: clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:21
+using IPn = IntPtr<&n + 1>;
+using IPn = IntPtr<&n + 1>;
 
----------------
`using IPn = IntPtr<&n + 2>` should be an error since that would be out of bounds, while `+1` is ok b/c it is one past the end as long as we don't deref.


================
Comment at: clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:21
+using IPn = IntPtr<&n + 1>;
+using IPn = IntPtr<&n + 1>;
 
----------------
shafik wrote:
> `using IPn = IntPtr<&n + 2>` should be an error since that would be out of bounds, while `+1` is ok b/c it is one past the end as long as we don't deref.
gcc reject this one but I think their pointer math is wonky here: https://godbolt.org/z/fhMqPPefG


================
Comment at: clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:26
 
-using IP3 = IntPtr<&s.n[3]>; // FIXME expected-error {{refers to subobject}}
-using IP3 = IntPtr<s.n + 3>; // FIXME expected-error {{refers to subobject}}
+using IP3 = IntPtr<&s.n[3]>;
+using IP3 = IntPtr<s.n + 3>;
----------------
We should reject `IntPtr<&s.n[5]>;` again b/c it is out of bounds. 


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D140996



More information about the cfe-commits mailing list