ericniebler / range-v3

Range library for C++14/17/20, basis for C++20's std::ranges
Other
4.06k stars 437 forks source link

error: satisfaction of atomic constraint ‘requires(T& t, T& u) {(concepts::<unnamed>::swap)(t, u);} [with T = S]’ depends on itself #1722

Closed DarthGandalf closed 1 year ago

DarthGandalf commented 1 year ago

I'm trying to package 0.12.0 in gentoo linux, and this fails during unit test with gcc 11:

[194/757] /usr/bin/x86_64-pc-linux-gnu-g++  -I/mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0/include  -O2 -pipe -march=znver2 -ggdb3 -frecord-gcc-switches -O3 -DNDEBUG -std=c++14 -Wall -Wextra -fdiagnostics-show-template-tree -ftemplate-backtrace-limit
=0 -fomit-frame-pointer -Ofast -fstrict-aliasing -ffast-math -fsized-deallocation -DRANGES_CXX_ALIGNED_NEW=0 -fconcepts -MD -MT CMakeFiles/test.range.v3.headers.dir/headers/range/v3/utility.cpp.o -MF CMakeFiles/test.range.v3.headers.dir/headers/range/v3/utility.cpp.o.d -o C
MakeFiles/test.range.v3.headers.dir/headers/range/v3/utility.cpp.o -c /mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0_build/headers/range/v3/utility.cpp                                                                                                     
FAILED: CMakeFiles/test.range.v3.headers.dir/headers/range/v3/utility.cpp.o                                                                                                                                                                                                       
/usr/bin/x86_64-pc-linux-gnu-g++  -I/mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0/include  -O2 -pipe -march=znver2 -ggdb3 -frecord-gcc-switches -O3 -DNDEBUG -std=c++14 -Wall -Wextra -fdiagnostics-show-template-tree -ftemplate-backtrace-limit=0 -fomit-
frame-pointer -Ofast -fstrict-aliasing -ffast-math -fsized-deallocation -DRANGES_CXX_ALIGNED_NEW=0 -fconcepts -MD -MT CMakeFiles/test.range.v3.headers.dir/headers/range/v3/utility.cpp.o -MF CMakeFiles/test.range.v3.headers.dir/headers/range/v3/utility.cpp.o.d -o CMakeFiles/
test.range.v3.headers.dir/headers/range/v3/utility.cpp.o -c /mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0_build/headers/range/v3/utility.cpp
In file included from /mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0/include/range/v3/utility/any.hpp:23,
                 from /mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0/include/range/v3/utility.hpp:17,
                 from /mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0_build/headers/range/v3/utility.cpp:1:
/mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0/include/concepts/swap.hpp: In substitution of ‘template<class TRef, class T>  requires (copyable<T>) && !(same_as<T, ranges::any>) ranges::any::any(TRef&&) [with TRef = std::default_delete<ranges::any::int
erface>&; T = std::default_delete<ranges::any::interface>]’:
/mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0/include/concepts/swap.hpp:179:22:   required by substitution of ‘template<class T, class U> decltype (concepts::adl_swap_detail::swap(declval<T>(), declval<U>())) concepts::adl_swap_detail::try_adl_swap_(i
nt) [with T = std::default_delete<ranges::any::interface>&; U = std::default_delete<ranges::any::interface>&]’
/mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0/include/concepts/swap.hpp:186:14:   required from ‘constexpr const bool concepts::adl_swap_detail::is_adl_swappable_v<std::default_delete<ranges::any::interface>&>’
/mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0/include/concepts/swap.hpp:205:18:   required by substitution of ‘template<class T> constexpr meta::if_c<((! is_adl_swappable_v<T&>) && is_movable_v<T>)> concepts::adl_swap_detail::swap_fn::operator()(T&, T
&) const [with T = std::default_delete<ranges::any::interface>]’
/mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0/include/concepts/concepts.hpp:984:9:   required by substitution of ‘template<class TRef, class T>  requires (copyable<T>) && !(same_as<T, ranges::any>) ranges::any::any(TRef&&) [with TRef = std::default_de
lete<ranges::any::interface>&; T = std::default_delete<ranges::any::interface>]’
/usr/lib/gcc/x86_64-pc-linux-gnu/11.3.0/include/g++-v11/type_traits:2700:31:   required by substitution of ‘template<class _Tp, class> static std::true_type std::__swappable_details::__do_is_swappable_impl::__test(int) [with _Tp = std::default_delete<ranges::any::interface>
; <template-parameter-1-2> = <missing>]’
/usr/lib/gcc/x86_64-pc-linux-gnu/11.3.0/include/g++-v11/type_traits:2724:35:   required from ‘struct std::__is_swappable_impl<std::default_delete<ranges::any::interface> >’
/usr/lib/gcc/x86_64-pc-linux-gnu/11.3.0/include/g++-v11/type_traits:2735:12:   required from ‘struct std::__is_swappable<std::default_delete<ranges::any::interface> >’
/usr/lib/gcc/x86_64-pc-linux-gnu/11.3.0/include/g++-v11/bits/unique_ptr.h:463:37:   required from ‘void std::unique_ptr<_Tp, _Dp>::swap(std::unique_ptr<_Tp, _Dp>&) [with _Tp = ranges::any::interface; _Dp = std::default_delete<ranges::any::interface>]’
/mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0/include/range/v3/utility/any.hpp:161:22:   required from here
/mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0/include/concepts/concepts.hpp:984:9:   required for the satisfaction of ‘swappable_requires_<T>’ [with T = std::default_delete<ranges::any::interface>]
/mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0/include/concepts/concepts.hpp:992:21:   required for the satisfaction of ‘swappable<T>’ [with T = std::default_delete<ranges::any::interface>]
/mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0/include/concepts/concepts.hpp:1194:21:   required for the satisfaction of ‘movable<T>’ [with T = std::default_delete<ranges::any::interface>]
/mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0/include/concepts/concepts.hpp:1209:21:   required for the satisfaction of ‘copyable<T>’ [with T = std::default_delete<ranges::any::interface>]
/mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0/include/concepts/concepts.hpp:984:9:   in requirements with ‘T& t’, ‘T& u’ [with T = std::default_delete<ranges::any::interface>]
/mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0/include/concepts/concepts.hpp:471:5: error: satisfaction of atomic constraint ‘requires(T& t, T& u) {(concepts::<unnamed>::swap)(t, u);} [with T = S]’ depends on itself
  471 |     requires(__VA_ARGS__) CPP_REQUIRES_AUX_
      |     ^
/mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0/include/concepts/concepts.hpp:66:30: note: in expansion of macro ‘CPP_REQUIRES_requires’
   66 | #define CPP_PP_CAT_(X, ...)  X ## __VA_ARGS__
      |                              ^
/mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0/include/concepts/concepts.hpp:67:30: note: in expansion of macro ‘CPP_PP_CAT_’
   67 | #define CPP_PP_CAT(X, ...)   CPP_PP_CAT_(X, __VA_ARGS__)
      |                              ^~~~~~~~~~~
/mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0/include/concepts/concepts.hpp:464:9: note: in expansion of macro ‘CPP_PP_CAT’
  464 |         CPP_PP_CAT(CPP_REQUIRES_, REQS)
      |         ^~~~~~~~~~
/mnt/portagetmp/portage/dev-cpp/range-v3-0.12.0/work/range-v3-0.12.0/include/concepts/concepts.hpp:984:9: note: in expansion of macro ‘CPP_requires’
  984 |         CPP_requires(swappable_,
      |         ^~~~~~~~~~~~

build.log

brevzin commented 1 year ago

Is this still true after #1715 and #1716?

DarthGandalf commented 1 year ago

Thanks, I saw these PRs, but didn't consider them to be relevant from their description