Что Boost :: Hana :: Всегда делает больше, чем просто «всегда возвращает свой первый аргумент»?C++

Программы на C++. Форум разработчиков
Anonymous
Что Boost :: Hana :: Всегда делает больше, чем просто «всегда возвращает свой первый аргумент»?

Сообщение Anonymous »

На странице DOC Boost :: hana :: Always < /code> я читаю, что < /p>

Код: Выделить всё

always(x)
- функция, такая, что

Код: Выделить всё

always(x)(y...) == x
для любого y ... .

Это заставляет меня думать, что это не должно вести себя иначе, чем этот лямбда: [] (Auto const & ...) {return false; } .
как бы это ни было. Например, следующий код печатает 11 , но если я изменю третью лямбду на hana :: always (false) , то он печатает 00 , показывая, что всегда глотает любой аргумент.

Код: Выделить всё

#include 
#include 
#include 

auto fun = boost::hana::overload(
[](int){ return true; },
[](double){ return true; },
[](auto const&...){ return false; }
);

int main() {
std::cout  std::same_as;
#else
{ p(e, e) } -> std::convertible_to;
#endif
}
auto operator()(E&&) const {
}

P p;
};
#if 1
auto const foo = Foo{boost::hana::always(true)};
#else
auto const foo = Foo{[](auto const& ...){ return true; }};
#endif

int main() {
int bar;
foo(bar);
}
Я был настолько озадачен тем фактом, что я мог потребовать , что то, что я знаю, чтобы быть предикатом, вернет что -то std :: convertible_to , но не то, что является std :: some_as !>

Подробнее здесь: https://stackoverflow.com/questions/666 ... st-argumen

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