Учитывая состояние, известное во время выполнения, этот макрос расширяется до утверждения во время выполнения, аналогичного макросу assert. Предоставляемое условие должно быть явно конвертируемым в bool, и оно не должно быть моделью концепции Constant. Если условие Constant, будет запущено статическое утверждение с просьбой использовать макрос BOOST_HANA_CONSTANT_ASSERT.
Учитывая состояние, известное в момент компиляции в виде Constant, этот макрос расширяется до утверждения времени компиляции, аналогичного static_assert. Предоставляемое условие должно быть моделью концепции Constant, в этом случае его значение извлекается с использованием hana::value и затем преобразуется в bool. Если условие не является Constant, запускается статическое утверждение с просьбой использовать макрос BOOST_HANA_RUNTIME_ASSERT.
Этот макрос может использоваться только в глобальном пространстве и области функций; он не может использоваться в области классов. Обратите внимание, что состояние никогда не может быть оценено во время выполнения. Следовательно, любой побочный эффект может не иметь места (но вы не должны полагаться на побочные эффекты в любом случае).
Расширяется до самой сильной формы утверждения, возможной для данного состояния.
При условии, BOOST_HANA_ASSERT расширяется либо до времени компиляции, либо до утверждения времени выполнения, в зависимости от того, известно ли значение состояния в момент компиляции или во время выполнения. Утверждения времени компиляции всегда предпочтительнее утверждений времени выполнения. Если условие является моделью концепции Constant, его значение (определяемое с hana::value) предполагается явно конвертируемым в bool, и на нем выполняется утверждение времени компиляции. В противном случае само условие предполагается явно конвертируемым в bool, и на нем выполняется утверждение времени выполнения.
Если утверждение может быть выполнено во время компиляции, условие не гарантировано будет оценено во время выполнения вообще (но это может). Следовательно, в целом, вы не должны полагаться на побочные эффекты, которые происходят внутри утверждения.
Расширяется до статического утверждения или утверждения времени выполнения, в зависимости от того, поддерживаются ли лямбды constexpr.
Этот макрос используется для утверждения на условиях, которые были бы постоянным выражением, если бы были поддержаны лямбды constexpr. В настоящее время лямбда constexpr не поддерживаются, и это всегда утверждение во время выполнения. В частности, это эквивалентно BOOST_HANA_RUNTIME_ASSERT.
Статья Boost.Hana: Assertions раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.