Quuxplusone added inline comments.

================
Comment at: clang/include/clang/Basic/DiagnosticASTKinds.td:223
+def note_constexpr_bit_cast_invalid_type : Note<
+  "cannot constexpr evaluate a bit_cast with a "
+  "%select{union|pointer|member pointer|volatile|struct with a reference 
member}0"
----------------
rsmith wrote:
> "constexpr evaluate" doesn't really mean anything. Also, the "struct with a 
> reference member type X" case seems a bit strangely phrased (and it need not 
> be a struct anyway...).
> 
> Maybe "cannot bit_cast {from|to}0 a {|type with a}1 {union|pointer|member 
> pointer|volatile|reference}2 {type|member}1 in a constant expression"?
Peanut gallery says: Surely wherever this message comes from should use the 
same wording as other similar messages: `"(this construction) is not allowed in 
a constant expression"`. That is, the diagnostics for
```
constexpr int *foo(void *p) { return reinterpret_cast<int*>(p); }
constexpr int *bar(void *p) { return std::bit_cast<int*>(p); }
```
should be word-for-word identical except for the kind of cast they're 
complaining about.

(And if I had my pedantic druthers, every such message would say "...does not 
produce a constant expression" instead of "...is not allowed in a constant 
expression." But that's way out of scope for this patch.)


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

https://reviews.llvm.org/D62825



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

Reply via email to