У меня есть следующий код, и я не могу сгладить вложенный диапазон, используя std :: views :: join < /p>
template
consteval auto get_names() {
using get_fn = decltype(
[] {
auto result_view = std::meta::bases_of(^^T, std::meta::access_context::unchecked())
| std::views::transform([](std::meta::info r) {
return std::meta::members_of(r, std::meta::access_context::unchecked());
})
// JOIN does not work
// | std::views::join
;
// show range can be flattened
static_assert(std::is_same_v);
assert(1 == std::ranges::distance(result_view.begin(), result_view.end()));
// return placeholder
return std::vector {1,2,3,4};
});
return get_fn{}().size();
}
< /code>
Когда я не понаблюдаюсь (и static_assert), я получаю длинную ошибку (ссылка Godbolt).
Я делаю что -то не так или должно работать?/opt/compiler-explorer/clang-bb-p2996-trunk-20250623/bin/../include/c++/v1/meta:663:12: note: subexpression not valid in a constant expression
663 | return __metafunction(detail::__metafn_get_begin_member_decl_of,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
664 | reflectedEntity, ^^sentinel);
Подробнее здесь: https://stackoverflow.com/questions/796 ... dviewsjoin
Почему я не могу сгладить диапазон std :: meta :: info с помощью std :: views :: join? ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение