I was interested by asserts and how the compiler uses them to optimize the code. So I looked at the compiler explorer to see how and found it, it doesn't.

What I tried to do is turn a std.conv.to!ulong(byte) to a simple cast with the help of assertions.
https://godbolt.org/g/4uckWU

If there is an assert right before an if with the same condition, I think it should remove the compare and jump in release, but it doesn't. I'm assuming the compilers just aren't ready yet, but should be someday. At least that is what the documentation promises.

More curious made me "assertNotThrown!ConvOverflowException(input.to!ubyte)" where it didn't even remove the assert code in release and produced the most inefficient assembly. Is that intended behaviour? In my opinion that greatly limits the usabilty of it.

Reply via email to