- Title
- Permissible uses of void
- Status
- c++11
- Section
- 6.9.3 [basic.fundamental]
- Submitter
- Nikolay Ivchenkov
Created on 2010-03-17.00:00:00 last changed 152 months ago
Messages
Date: 2011-03-15.00:00:00
[Voted into the WP at the March, 2011 meeting as part of paper N3262.]
Date: 2011-02-15.00:00:00
Proposed resolution (February, 2011) [SUPERSEDED]: Change 6.9.3 [basic.fundamental] paragraph 9 as follows: Change 7.6.16 [expr.cond] paragraph 2 as follows: Change 8.8.4 [stmt.return] paragraph 3 as follows:
...Any expression can be explicitly converted to type cv
void (7.6.3 [expr.cast]). An expression of type
void shall be used only as an expression statement
(8.3 [stmt.expr]), as an operand of a comma expression
(7.6.20 [expr.comma]), as a second or third operand of
?: (7.6.16 [expr.cond]), as the operand of
typeid or decltype ,
or as the
expression in a return statement (8.8.4 [stmt.return]) for a
function with the return type void , or as the operand
of an explicit conversion to type cv void .
If either the second or the third operand has type
(possibly
cv-qualified) void , then...
A return statement with an expression of type
“cv void ” can be
used only in functions with a return type of cv void ;
the expression is evaluated just before the function returns to its
caller.
Date: 2026-07-25.21:52:10
According to 6.9.3 [basic.fundamental] paragraph 9, First, this is self-contradictory: if “any expression”
can be converted to void , why is such a conversion not listed
among the acceptable uses of an expression of type void ? Second, presumably an expression of type void can be used
as an operand of decltype , but this use is not listed. Finally, there are several places in the Standard that speak of
expressions having a cv-qualified void type
(7.6.16 [expr.cond] paragraph 2, 8.8.4 [stmt.return] paragraph 3)
. However, an expression of type void is a
non-class prvalue, and there are no cv-qualified non-class prvalues
(7.2.1 [basic.lval] paragraph 4).
Any expression can be explicitly converted to type cv
void (7.6.3 [expr.cast]). An expression of type
void shall be used only as an expression statement
(8.3 [stmt.expr]), as an operand of a comma expression
(7.6.20 [expr.comma]), as a second or third operand of
?: (7.6.16 [expr.cond]), as the operand of
typeid , or as the expression in a return statement
(8.8.4 [stmt.return]) for a function with the return type
void .
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2014-03-03 00:00:00 | admin | set | status: fdis -> c++11 |
| 2011-04-10 00:00:00 | admin | set | messages: + msg3304 |
| 2011-04-10 00:00:00 | admin | set | status: review -> fdis |
| 2011-02-28 00:00:00 | admin | set | messages: + msg3239 |
| 2011-02-28 00:00:00 | admin | set | status: drafting -> review |
| 2010-08-23 00:00:00 | admin | set | status: open -> drafting |
| 2010-03-17 00:00:00 | admin | create | |