My point is that even though the assert() is optimised out, the compiler could still assume that the condition is valid.
How? The assert() has no special significance to the compiler at all, it's just code. Usually it's just an empty macro for non-debug builds.
I guess you could define your assert() use [[assume]] in C++ for non-debug builds... but that seems like a very bad idea to me.
Just leave the asserts in prod. They almost certainly don't have measurable overhead. The few that do can be dealt with separately.
The Linux kernel has thousands of asserts which are always checked at runtime (BUG_ON).
How? The assert() has no special significance to the compiler at all, it's just code. Usually it's just an empty macro for non-debug builds.
I guess you could define your assert() use [[assume]] in C++ for non-debug builds... but that seems like a very bad idea to me.
Just leave the asserts in prod. They almost certainly don't have measurable overhead. The few that do can be dealt with separately.
The Linux kernel has thousands of asserts which are always checked at runtime (BUG_ON).