static_assert¶
static_assert
- способ удостовериться в истинности какого-либо условия во время компиляции.
Данный оператор состоит из ключевого слова static_assert
и constexpr
выражения в ()
скобках после него.
Выражение должно иметь тип bool
. Если выражение равно false
, компилятор породит ошибку.
fn Foo()
{
static_assert( 75 / 3 == 25 ); // Ок, выражение истинно
static_assert( 0.0f != 0.0f ); // Выражение ложно - будет порождена ошибка
}
static_assert
можно размещать внутри тел функций, внутри структур и классов, внутри пространств имён.
static_assert( true ); // В корневом пространстве имён
namespace N
{
static_assert( 1 + 2 == 3 ); // В пространстве имён
}
struct S
{
static_assert( typeinfo</i32/>.size_of == 4s ); // В структуре
}
fn Foo()
{
static_assert( 8u % 3u == 2u ); // В функции
}
Также существует static_assert
с сообщением, которое указывается через запятую после выражения-условия.
В случае ложности условия компилятор выведет это сообщение как ошибку.
static_assert( false, "es tut mir leid" );
Компилятор выдаст ошибку примерно следующего содержания:
error: Static assertion failed: Es tut mir leid.