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.