C++ Logo

std-proposals

Advanced search

Re: [std-proposals] compile_assert() a static assert that fires at compile time, not runtime.

From: Jonathan Grant <jg_at_[hidden]>
Date: Fri, 27 Feb 2026 22:42:18 +0000
On 19/02/2026 15:40, Andre Kostur wrote:
> On Thu, Feb 19, 2026 at 7:28 AM Jonathan Grant <jg_at_[hidden]> wrote:
>>
>> Hello
>>
>> On 19/02/2026 15:11, Andre Kostur wrote:
>>> Does this mean that this can/will behave differently depending on what
>>> optimization levels you may have enabled on the compiler? -O3 and it
>>> can pass the compile_assert(), -O0 and the compile_assert() fails?
>>> If so, this could be troublesome in the context of the Standard since
>>> it doesn't currently acknowledge "optimization levels".
>>
>> Hello Andre
>>
>> if __OPTIMIZE__ is not defined, the compile_assert() macros all compile out.
>
> That's already a problem for Standardization. __OPTIMIZE__ isn't a
> Standard-defined macro. One would have to get that standardized first
> before this feature could rely on it.

Many thanks for your reply Andre,

Do you think it is too complicated to get a certain base level of optimization in a programming language like C++?

Updated my compile_assert proposal to clarify compile_assert keyword is just the syntax. It's implementation is left to the compilers to decide to what extent they optimize and support. Of course for the moment there is the macro, I have it in use with clang and gcc.

https://github.com/jonnygrant/compile_assert/blob/main/compile_assert.h
https://github.com/jonnygrant/compile_assert/blob/main/proposal/compile_assert__isocpp__P4021Rx_edit.pdf
^ This is my edited draft.
 
>> I've not compared eg -O1 and -O3 to know of any differences, but you're right there might be. The errors may end up very compiler and optimizer specific (gcc vs clang etc), it may not be possible to have all compile_assert() desired with a particular compiler.
>
> I've seen the optimization level influence which warnings the compiler
> will emit about code. Different optimization levels could cause the
> compiler to do deeper or shallower code analysis. Which makes this
> feature difficult to Standardize. The Standard doesn't get to assume
> that optimizations happen at all.
>
>> -- In which case, I would achieve the check another way (ie very close to the line of I am concerned about), or treat as a human review, and put in some mitigations and error handling by myself (and a test function to trigger a fault while running, an overflow etc and check detected), compile_assert() isn't suited to everything.
>
> Just for clarity: I'm not saying anything about the utility of this
> feature. Only that it will be a hard sell to Standardize it.

Thank you for your feedback! It's a vibrant discussion

Jonathan

Received on 2026-02-27 22:42:25