C++ Logo

std-proposals

Advanced search

[std-proposals] "once" keyword

From: LUCE Jean-Sébastien <jseb.luce_at_[hidden]>
Date: Wed, 24 May 2023 14:57:55 +0200
Hello

It is often useful to support multiple cancel conditions, like 'return' in
a function, but without having to isolate the code in such a function
(which is called from a single point).

I'm used to write code like

"
 do {
     if (Failed(Condition0))
        break;
     if (Failed(Condition1))
        break;
     Code_to_execute;
} while (0);
"
or

"
 while (Condition0) {
     if (Failed(Condition1))
        break;
     Code_to_execute;
     break;
};
"

the example above looks trivial and could be replaced by
if (Succeeded(Condition0) && Succeeded(Condition1)) {
    Code_to_execute;
}

Yet with more complex condition codes, writing conditions per line is way
more readable.

The syntaxe is still "hacked" someway, since "continue" could be used
wrongly, or final "break" may be forgotten.

I would like "once" behave like do { } while(0);, where only "break" (and
not "continue") would have a meaning.

for example above could be converted as
"
 once {
     if (Failed(Condition0))
        break;
     if (Failed(Condition1))
        break;
     Code_to_execute;
}
"

"
 once (Condition0) {
     if (Failed(Condition1))
        break;
     Code_to_execute;
}
"

"once" could be followed or not by a first condition.

Thanks

Received on 2023-05-24 12:58:12