That's not that choice here though. I have no issue with aborting compilation when validation fails; the issue is with using assert() to do that, because it may either not trigger (i.e., in NDEBUG builds) or potentially escalate the consequences by calling abort() in an inappropriate context.
I feel like we've probably had this discussion before, but do you see any place for assert()? I see it as a way to communicate and/or double-check the internal assumptions the code is making; in that sense it makes sense that it's disabled on NDEBUG, and also that it aborts the program entirely, since it's only meant to be a developer tool. I get the impression you don't see that as sensible, though—and that *any* internal assumptions should either just not be written out, or should be validated *always*, even for "release" builds, and shouldn't crash the program?