file
Assert.hMacro CORRADE_
Contents
- Reference
Defines
- #define CORRADE_ASSERT(condition, message, returnValue)
- Assertion macro.
- #define CORRADE_CONSTEXPR_ASSERT(condition, message)
- Constexpr assertion macro.
- #define CORRADE_ASSERT_OUTPUT(call, message, returnValue)
- Call output assertion macro.
- #define CORRADE_INTERNAL_ASSERT(condition)
- Internal assertion macro.
- #define CORRADE_INTERNAL_CONSTEXPR_ASSERT(condition)
- Internal constexpr assertion macro.
- #define CORRADE_INTERNAL_ASSERT_OUTPUT(call)
- Internal call output assertion macro.
- #define CORRADE_ASSERT_UNREACHABLE()
- Assert that the following code is unreachable.
Define documentation
#define CORRADE_ASSERT(condition, message, returnValue)
Assertion macro.
Parameters | |
---|---|
condition | Assert condition |
message | Message on assertion fail |
returnValue | Return value on assertion fail |
Usable for sanity checks on user input, as it prints explanational message on error.
By default, if assertion fails, message
is printed to error output and the application aborts. If CORRADE_GRACEFUL_ASSERT
is defined, the message is printed and the function returns with returnValue
. If CORRADE_NO_ASSERT
is defined, this macro compiles to do {} while(0)
. Example usage:
T operator[](std::size_t pos) const { CORRADE_ASSERT(pos < size(), "Array::operator[](): index out of range", {}); return data[pos]; }
If the function has return type void
, just use an empty parameter (allowed in C++11):
void compile() { CORRADE_ASSERT(!sources.empty(), "Shader::compile(): no sources added", ); // ... }
You can use stream output operators for formatting just like when printing to Corrade::
CORRADE_ASSERT(pos < size(), "Array::operator[](): accessing element" << pos << "in an array of size" << size(), {});
#define CORRADE_CONSTEXPR_ASSERT(condition, message)
Constexpr assertion macro.
Parameters | |
---|---|
condition | Assert condition |
message | Message on assertion fail |
Unlike CORRADE_constexpr
functions like this:
constexpr int divide(int a, int b) { return CORRADE_CONSTEXPR_ASSERT(b, "divide(): can't divide by zero"), a/b; }
In a constexpr
context, if assertion fails, the code fails to compile. In a non- constexpr
context, if assertion fails, message
is printed to error output and the application aborts. If CORRADE_GRACEFUL_ASSERT
is defined, the message is printed and the rest of the function gets executed as usual. If CORRADE_NO_ASSERT
is defined, this macro compiles to static_cast<void>(0)
.
As with CORRADE_
#define CORRADE_ASSERT_OUTPUT(call, message, returnValue)
Call output assertion macro.
Parameters | |
---|---|
call | Assert call |
message | Message on assertion fail |
returnValue | Return value on assertion fail |
Unlike CORRADE_CORRADE_NO_ASSERT
is defined, making it usable for checking function output. Otherwise the behavior is the same as with CORRADE_
CORRADE_ASSERT_OUTPUT(initialize(userParam), "Initialization failed: wrong parameter" << userParam, );
#define CORRADE_INTERNAL_ASSERT(condition)
Internal assertion macro.
Parameters | |
---|---|
condition | Assert condition |
Unlike CORRADE_
By default, if assertion fails, failed condition, file and line is printed to error output and the application aborts. If CORRADE_NO_ASSERT
is defined, this macro compiles to do {} while(0)
. Example usage:
CORRADE_INTERNAL_ASSERT(pos < size());
#define CORRADE_INTERNAL_CONSTEXPR_ASSERT(condition)
Internal constexpr assertion macro.
Parameters | |
---|---|
condition | Assert condition |
Unlike CORRADE_constexpr
functions like this:
constexpr int divide(int a, int b) { return CORRADE_INTERNAL_CONSTEXPR_ASSERT(b), a/b; }
In a constexpr
context, if assertion fails, the code fails to compile. In a non- constexpr
context, if assertion fails, failed condition, file and line is printed to error output and the application aborts. If CORRADE_NO_ASSERT
is defined, this macro compiles to static_cast<void>(0)
.
#define CORRADE_INTERNAL_ASSERT_OUTPUT(call)
Internal call output assertion macro.
Parameters | |
---|---|
call | Assert call |
Unlike CORRADE_CORRADE_NO_ASSERT
is defined, making it usable for checking function output. Otherwise the behavior is the same as with CORRADE_
CORRADE_INTERNAL_ASSERT_OUTPUT(initialize());
#define CORRADE_ASSERT_UNREACHABLE()
Assert that the following code is unreachable.
By default, if code marked with this macro is reached, message with file and line is printed to error output and the application aborts. If CORRADE_NO_ASSERT
is defined, this macro hints to the compiler that given code is not reachable, possibly improving performance. Example usage:
switch(flag) { case Flag::A: return foo; case Flag::B: return bar; } CORRADE_ASSERT_UNREACHABLE();