There are two sorts of assertions in C++:
assert
static_assert
They both come from <cassert>
.
assert
assert
is a preprocessor macro that is, essentially:
void assert(bool condition) { if (!condition) { cerr << "assertion failed: name-of-condition\n" abort(); } }
assert
example#include <cassert> #include <string> void delete_file(const std::string &fname) { assert(!fname.empty()); remove(fname.c_str()); } int main() { delete_file("tempfile"); delete_file(""); }
a.out: c.cc:5: void delete_file(const string&): Assertion `!fname.empty()' failed. SIGABRT: Aborted
assert
assert
for dealing with user errors.
static_assert
static_assert
is like assert
, but:
static_assert
example#include <iostream> #include <cassert> static_assert(-1 >> 9 == -1, "right shift must preserve sign"); int main() { std::cout << "Hello, world!\n"; static_assert(sizeof(char)==1, "char must be 8 bits"); return 0; } static_assert(sizeof(int)==3, "int must be 24 bits");
c.cc:12: error: static assertion failed: int must be 24 bits