In current C++ when body of if statements contain only one command then:

Parenthesis around if condition are mandatory but block are optional. So, both examples are OK:

if ( condition ) { return 0; }
if ( condition ) return 0;

But is it theoretically possible to do it also oppositely?:

Blocks mandatory and parenthesis around if condition optional:

if ( condition ) { return 0; }
if condition { return 0; }

Is it teoretically possible to extend C++ syntax this way? (for example as extension in some C++ compiler or theoretically in some future C++ standard).
Or collides this hypothetical extension with some other C++ syntactic rule?

Note: Personal opinions if this extension should be made or not are irelevant – that’s not the question.

EDIT:

Strict interpretation of question has ben answered by Jules.

But if “optional parenthesis” will not mean “optional in every case” but instead “optional in most of cases”, then proposed change in C++ still can be made. In rare corner cases like that in Jules answer, compiler can detect ambiquity, and output error:

"Ambiguous if condition. You must explicitly use parenthesis to resolve it"

11

I don’t believe any such extension could be made. The problem is that there doesn’t seem to be any way to tell if a brace is the start of an initializer or not. For example, the following code would appear to be ambiguous under your proposed change:

if new T{} { hello(); }

The two interpretations are:

  1. Create a new T with an empty initializer list, and if the result is not null call “hello”.

  2. Create a new T with the default constructor, and if the result is not null, do nothing. Then call “hello” in either case.

3

No. The C and C++ standards explicitly specify that the if keyword must be followed by a parenthesized expression. The compiler is required to reject any program where that’s not the case.

The relevant section in the C++ standard is §6.4 Selection statements:

Selection statements choose one of several flows of control.

selection-statement:

if ( condition ) statement
if ( condition ) statement else statement

This is the BNF (Backus-Naur form) grammar for the if statement, and the ( and ) are specified and therefore required for the statement to match as valid.

To make your suggested syntax valid will require a revision to the standard, which you are free to propose to the ISO Working Group 21, but you will be expected to defend the proposal.

3