I use this pattern across my codebase for the "critical functionality missing" scenario: #if DEBUG #define TODO(msg) #else #define TODO(msg) #error msg #endif Works like a charm. I've got another PRERELEASE() macro that lets you do an unofficial preview build, but would break an official stable release.
Nice! Isn't this exactly assert in C++? (the following is from https://en.cppreference.com/w/cpp/error/assert ) #ifdef NDEBUG #define assert(condition) ((void)0) #else #define assert(condition) /*implementation defined*/ #endif ... assert(("There are five lights", 2 + 2 == 5)); ... test: test.cc:10: int main(): Assertion `((void)"There are five lights", 2+2==5)' failed. Take it as a token that you are doing something…
static_assert(sizeof(StructUsedInSomeBinaryProtocol) == SomeConstantExpectedByTheOtherSide, "")