In file included from /opt/compiler-explorer/libs/rangesv3/trunk/include/range/v3/view/ref.hpp:17,
from :3:
/opt/compiler-explorer/libs/rangesv3/trunk/include/range/v3/range/traits.hpp: In substitution of 'template requires (!(has_member_size) || (disable_sized_range)) && (!(has_non_member_size) || (disable_sized_range)) && (forward_iterator) && (sized_sentinel_for) constexpr ranges::_size_::fn::_result_t ranges::_size_::fn::operator()(R&&) const [with R = const ranges::ref_view&]':
/opt/compiler-explorer/libs/rangesv3/trunk/include/range/v3/range/traits.hpp:76:47: required by substitution of 'template using range_size_t = decltype (ranges::_::size(declval())) [with Rng = const ranges::ref_view]'
/opt/compiler-explorer/libs/rangesv3/trunk/include/meta/meta_fwd.hpp:286:18: required by substitution of 'template requires valid struct meta::detail::defer_ [with C = ranges::range_size_t; Ts = {const ranges::ref_view}]'
/opt/compiler-explorer/libs/rangesv3/trunk/include/meta/meta.hpp:788:12: required from 'struct meta::defer'
/opt/compiler-explorer/libs/rangesv3/trunk/include/range/v3/view/ref.hpp:121:1: required from 'struct boost::range_size'
/opt/compiler-explorer/libs/boost_1_85_0/boost/range/size.hpp:55:5: required by substitution of 'template typename boost::range_size::type boost::size(const SinglePassRange&) [with SinglePassRange = ranges::ref_view]'
/opt/compiler-explorer/libs/rangesv3/trunk/include/range/v3/range/primitives.hpp:63:9: required from here
/opt/compiler-explorer/libs/rangesv3/trunk/include/range/v3/range/primitives.hpp:63:9: required for the satisfaction of 'has_non_member_size_requires_' [with T = const ranges::ref_view&]
/opt/compiler-explorer/libs/rangesv3/trunk/include/range/v3/range/primitives.hpp:63:9: in requirements with 'T&& t' [with T = const ranges::ref_view&]
/opt/compiler-explorer/libs/rangesv3/trunk/include/range/v3/range/primitives.hpp:63:9: error: satisfaction of atomic constraint 'requires(T&& t) {ranges::_size_::size((T&&(t)));} [with T = T]' depends on itself
63 | CPP_requires(has_non_member_size_,
| ^
Некоторые наблюдения:
удаление const из определения псевдонима Foo, исправления ошибка компиляции;
сохранение этой константы и изменение std::list на std::vector также устраняет ошибку компиляции;
Я потерялся в черной магии макросов, происходящей между и ;
Я думаю, что диапазоны::_size_::has_non_member_size; разрешаются в диапазоны::_size_::has_non_member_size_requires_; и clangd говорит мне, что если я это понимаю (а я так не думаю!), это эквивалентно
Я сократил пример до следующего: [code]#include #include [*] #include
int main() { std::list l; using Foo = const ranges::ref_view&; ranges::_size_::has_non_member_size; } [/code] который [list] с -std=c++20 компилируется с GCC = 1.1, [*]с -std=c++17 компилируется в обоих случаях. [/list] Ошибка начинается так, и, похоже, она относится к концепции, которая требует сама себя (полную информацию об ошибке см. в первой ссылке выше): [code]In file included from /opt/compiler-explorer/libs/rangesv3/trunk/include/range/v3/view/ref.hpp:17, from :3: /opt/compiler-explorer/libs/rangesv3/trunk/include/range/v3/range/traits.hpp: In substitution of 'template requires (!(has_member_size) || (disable_sized_range)) && (!(has_non_member_size) || (disable_sized_range)) && (forward_iterator) && (sized_sentinel_for) constexpr ranges::_size_::fn::_result_t ranges::_size_::fn::operator()(R&&) const [with R = const ranges::ref_view&]': /opt/compiler-explorer/libs/rangesv3/trunk/include/range/v3/range/traits.hpp:76:47: required by substitution of 'template using range_size_t = decltype (ranges::_::size(declval())) [with Rng = const ranges::ref_view]' /opt/compiler-explorer/libs/rangesv3/trunk/include/meta/meta_fwd.hpp:286:18: required by substitution of 'template requires valid struct meta::detail::defer_ [with C = ranges::range_size_t; Ts = {const ranges::ref_view}]' /opt/compiler-explorer/libs/rangesv3/trunk/include/meta/meta.hpp:788:12: required from 'struct meta::defer' /opt/compiler-explorer/libs/rangesv3/trunk/include/range/v3/view/ref.hpp:121:1: required from 'struct boost::range_size' /opt/compiler-explorer/libs/boost_1_85_0/boost/range/size.hpp:55:5: required by substitution of 'template typename boost::range_size::type boost::size(const SinglePassRange&) [with SinglePassRange = ranges::ref_view]' /opt/compiler-explorer/libs/rangesv3/trunk/include/range/v3/range/primitives.hpp:63:9: required from here /opt/compiler-explorer/libs/rangesv3/trunk/include/range/v3/range/primitives.hpp:63:9: required for the satisfaction of 'has_non_member_size_requires_' [with T = const ranges::ref_view&] /opt/compiler-explorer/libs/rangesv3/trunk/include/range/v3/range/primitives.hpp:63:9: in requirements with 'T&& t' [with T = const ranges::ref_view&] /opt/compiler-explorer/libs/rangesv3/trunk/include/range/v3/range/primitives.hpp:63:9: error: satisfaction of atomic constraint 'requires(T&& t) {ranges::_size_::size((T&&(t)));} [with T = T]' depends on itself 63 | CPP_requires(has_non_member_size_, | ^ [/code] Некоторые наблюдения: [list] [*]удаление const из определения псевдонима Foo, исправления ошибка компиляции; [*]сохранение этой константы и изменение std::list на std::vector также устраняет ошибку компиляции; Я потерялся в черной магии макросов, происходящей между и ;
Я думаю, что диапазоны::_size_::has_non_member_size; разрешаются в диапазоны::_size_::has_non_member_size_requires_; и clangd говорит мне, что если я это понимаю (а я так не думаю!), это эквивалентно [code]template concept has_non_member_size_requires_ = requires(T &&t) { size((T &&)t); } [/code] но если я просто напишу такое понятие перед основным и подставлю его в последнюю строку исходного фрагмента, я не получу ошибку компиляции. [/list]
Я новичок в boost::python, поэтому, пожалуйста, простите меня, если задаю глупый вопрос. Я пытаюсь привязать классы Container и Iterator к Python. Мой контейнер похож на матрицу элементов, где к каждой строке можно получить доступ через метод...