в выражении
static_assert<true>();
, поскольку static_assert<true>
является типом, он вызывает конструктор static_assert<true>
. Поскольку static_assert<true>
специализируется на пустой структуре, ничего не будет затронуто.
Однако в
static_assert<false>();
, поскольку для static_assert<false>
нет специализации, общее определение
template <bool>
struct static_assert;
будет использоваться. Но здесь тип static_assert<B>
является неполным . Таким образом, вызов конструктора static_assert<B>
приведет к ошибке компиляции.
Следовательно, это называется «статическим утверждением», поскольку оператор прервет компиляцию, если выражение оценивается как false
, аналогично нормальной assert()
функции , которая убьет программу во время выполнения.