Потому что итератор- это по сути адрес Как можно получить адрес в компайл тайме?
потому что упустили добавить к методам begin/end у std::array constexpr
кстати забавно что range-based for работает в constexpr, хотя он (по стандарту) раскрываться через пару итераторов begin/end.
Aдрес локальной переменной не является core constant expression. Сделайте vars глобальной переменной — заработает. Или перепишите так: constexpr bool is_ok() { std::array vars{1,2,3}; auto lam = [](auto&& v) constexpr { return 3 == v; }; auto cb = vars.cbegin(); auto ce = vars.cend(); return std::any_of(cb , ce, lam); } int main() { constexpr bool ok = is_ok(); std::cout << ok << '\n'; }
Обсуждают сегодня