This is explicitly allowed via [expr.type.conv], if the initialization
list is empty.
Details
- Reviewers
rsmith
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
CC @Tyker for the changes to SemaCXX/attr-annotate.cpp.
clang/include/clang/Basic/DiagnosticSemaKinds.td | ||
---|---|---|
5848–5849 | Might also consider it a narrowing conversion. But I can't find the standard specifically calling it that. | |
clang/test/CXX/expr/expr.post/expr.type.conv/p2.cpp | ||
12 | With parantheses this is (correctly) allowed:
[expr.static.cast]p6:
Not sure if we need a test for that. |
This is CWG issue 2351. Please add a corresponding test to tests/CXX/drs/dr23xx.cpp.
clang/lib/Sema/SemaInit.cpp | ||
---|---|---|
1311–1319 | Hm, this seems like the wrong place for this check, given the wording -- the language rule is specific to functional casts, and shouldn't apply to initialization of void-typed objects in general -- but perhaps it's the best place we have (and I think we deal with the void() case here in SemaInit too). Please at least make sure that we still properly reject things like: void f() { return {}; } We also need to decide whether to accept the compound-literal form of this: void g() { (void){}; } GCC trunk does, but I'm not sure whether that's intentional or an oversight. We certainly shouldn't accept that (without a diagnostic, at least) in C. |