В С++ 11 законно писать, например:
int b = (some_function_returning_void(), 1020);
И вы вернетесь 1020. Но это не позволит вам написать:
int b = (static_assert(2 > 1, "all is lost"), 304);
Документация объясняет юридические места, где может возникнуть static_assert (keyword):
Объявление статического утверждения может отображаться в области блока (как объявление блока) и внутри тела класса (как объявление участника)
Просто для этого я пробовал пару вещей, пока это не сработало:
int b = ({static_assert(2 > 1, "all is lost"); 304;});
Но с -Wpedantic
я получаю "warning: ISO C++ forbids braced-groups within expressions"
. Интересно, что они называются выражениями выражения и , используемыми в ядре Linux.
Но представьте себе, что я хочу остаться -Wpedantic
. Существуют ли какие-либо чистые обходные пути?