Отложенная оценка с помощью boost::mpl::eval_ifC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Отложенная оценка с помощью boost::mpl::eval_if

Сообщение Гость »


У меня есть следующий код:

#include #include #include #include #include #include #include #include #include #include #include #include #include шаблон структура next_if : boost::mpl::eval_if< имя типа boost::mpl::apply::type, // boost::mpl::apply, boost::mpl::next, boost::mpl::identity > {}; шаблон struct predic: boost::mpl::bool_ { }; шаблон struct predic : boost::mpl::bool_< (N > 0 && N < 100) > { }; интервал основной() { static_assert(std::is_same_v, "") ; вернуть 0; } Он компилируется правильно с переданным static_assert, как показано в godbolt: https://godbolt.org/z/zcE9q8Trr .

Однако, если я закомментировал «typename boost::mpl::apply::type,» и раскомментировал « // boost::mpl::apply,", компиляция не удалась из-за ранней оценки mpl_::arg. /opt/compiler-explorer/libs/boost_1_64_0/boost/mpl/if.hpp: При создании экземпляра структуры boost::mpl::if_': /opt/compiler-explorer/libs/boost_1_64_0/boost/mpl/eval_if.hpp:37:41: требуется из 'struct boost::mpl::eval_if, boost::mpl::next, boost::mpl::identity >' :19:8: требуется из 'struct next_if' :40:87: требуется отсюда /opt/compiler-explorer/libs/boost_1_64_0/boost/mpl/aux_/static_cast.hpp:24:47: ошибка: «значение» не является членом «boost::mpl::apply' 24 | # определить BOOST_MPL_AUX_STATIC_CAST(T, выражение) static_cast(выражение) | ^~~~~~~~~~~~~~~~~~~~ Вопрос: почему бы «typename boost::mpl::apply::type,» не вызвать раннюю оценку boost:: заполнитель mpl_::arg для вычисления типа boost::mpl::apply, но более невинный вид "boost::mpl::apply " вместо этого?

Спасибо!
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»