C++ – Parenthesis Around if Statement Condition

ccompilerlanguage-designsyntax

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"

Best Answer

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.

Related Topic