ericniebler / range-v3

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

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

Open mymedia2 opened 2 years ago

mymedia2 commented 2 years ago

Fail to build autotests of the latest release v0.11.0 with GCC 11.2.0. Could you please take a look? A thousand thanks in advance.

[  0%] Building CXX object CMakeFiles/test.range.v3.headers.dir/headers/range/v3/utility.cpp.o
In file included from /build/range-v3/include/range/v3/utility/any.hpp:23,
                 from /build/range-v3/include/range/v3/utility.hpp:17,
                 from /build/range-v3/obj-x86_64-linux-gnu/headers/range/v3/utility.cpp:1:
/build/range-v3/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::interface>&; T = std::default_delete<ranges::any::interface>]’:
/build/range-v3/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_(int) [with T = std::default_delete<ranges::any::interface>&; U = std::default_delete<ranges::any::interface>&]’
/build/range-v3/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>&>’
/build/range-v3/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>]’
/build/range-v3/include/concepts/concepts.hpp:937: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_delete<ranges::any::interface>&; T = std::default_delete<ranges::any::interface>]’
/usr/include/c++/11/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/include/c++/11/type_traits:2724:35:   required from ‘struct std::__is_swappable_impl<std::default_delete<ranges::any::interface> >’
/usr/include/c++/11/type_traits:2735:12:   required from ‘struct std::__is_swappable<std::default_delete<ranges::any::interface> >’
/usr/include/c++/11/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>]’
/build/range-v3/include/range/v3/utility/any.hpp:163:22:   required from here
/build/range-v3/include/concepts/concepts.hpp:937:9:   required for the satisfaction of ‘swappable__requires_<T>’ [with T = std::default_delete<ranges::any::interface>]
/build/range-v3/include/concepts/concepts.hpp:943:21:   required for the satisfaction of ‘swappable<T>’ [with T = std::default_delete<ranges::any::interface>]
/build/range-v3/include/concepts/concepts.hpp:1099:21:   required for the satisfaction of ‘movable<T>’ [with T = std::default_delete<ranges::any::interface>]
/build/range-v3/include/concepts/concepts.hpp:1110:21:   required for the satisfaction of ‘copyable<T>’ [with T = std::default_delete<ranges::any::interface>]
/build/range-v3/include/concepts/concepts.hpp:937:9:   in requirements with ‘T& t’, ‘T& u’ [with T = std::default_delete<ranges::any::interface>]
/build/range-v3/include/concepts/concepts.hpp:455:5: error: satisfaction of atomic constraint ‘requires(T& t, T& u) {(concepts::<unnamed>::swap)(t, u);} [with T = S]’ depends on itself
  455 |     requires(__VA_ARGS__) CPP_REQUIRES_AUX_
      |     ^
/build/range-v3/include/concepts/concepts.hpp:66:30: note: in expansion of macro ‘CPP_REQUIRES_requires’
   66 | #define CPP_PP_CAT_(X, ...)  X ## __VA_ARGS__
      |                              ^
/build/range-v3/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__)
      |                              ^~~~~~~~~~~
/build/range-v3/include/concepts/concepts.hpp:448:5: note: in expansion of macro ‘CPP_PP_CAT’
  448 |     CPP_PP_CAT(CPP_REQUIRES_, REQS)
      |     ^~~~~~~~~~
/build/range-v3/include/concepts/concepts.hpp:937:9: note: in expansion of macro ‘CPP_requires’
  937 |         CPP_requires(swappable_,
      |         ^~~~~~~~~~~~
make[2]: *** [CMakeFiles/test.range.v3.headers.dir/build.make:2543: CMakeFiles/test.range.v3.headers.dir/headers/range/v3/utility.cpp.o] Ошибка 1
[  0%] Building CXX object CMakeFiles/test.range.v3.headers.dir/headers/range/v3/utility/any.cpp.o
In file included from /build/range-v3/include/range/v3/utility/any.hpp:23,
                 from /build/range-v3/obj-x86_64-linux-gnu/headers/range/v3/utility/any.cpp:1:
/build/range-v3/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::interface>&; T = std::default_delete<ranges::any::interface>]’:
/build/range-v3/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_(int) [with T = std::default_delete<ranges::any::interface>&; U = std::default_delete<ranges::any::interface>&]’
/build/range-v3/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>&>’
/build/range-v3/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>]’
/build/range-v3/include/concepts/concepts.hpp:937: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_delete<ranges::any::interface>&; T = std::default_delete<ranges::any::interface>]’
/usr/include/c++/11/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/include/c++/11/type_traits:2724:35:   required from ‘struct std::__is_swappable_impl<std::default_delete<ranges::any::interface> >’
/usr/include/c++/11/type_traits:2735:12:   required from ‘struct std::__is_swappable<std::default_delete<ranges::any::interface> >’
/usr/include/c++/11/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>]’
/build/range-v3/include/range/v3/utility/any.hpp:163:22:   required from here
/build/range-v3/include/concepts/concepts.hpp:937:9:   required for the satisfaction of ‘swappable__requires_<T>’ [with T = std::default_delete<ranges::any::interface>]
/build/range-v3/include/concepts/concepts.hpp:943:21:   required for the satisfaction of ‘swappable<T>’ [with T = std::default_delete<ranges::any::interface>]
/build/range-v3/include/concepts/concepts.hpp:1099:21:   required for the satisfaction of ‘movable<T>’ [with T = std::default_delete<ranges::any::interface>]
/build/range-v3/include/concepts/concepts.hpp:1110:21:   required for the satisfaction of ‘copyable<T>’ [with T = std::default_delete<ranges::any::interface>]
/build/range-v3/include/concepts/concepts.hpp:937:9:   in requirements with ‘T& t’, ‘T& u’ [with T = std::default_delete<ranges::any::interface>]
/build/range-v3/include/concepts/concepts.hpp:455:5: error: satisfaction of atomic constraint ‘requires(T& t, T& u) {(concepts::<unnamed>::swap)(t, u);} [with T = T]’ depends on itself
  455 |     requires(__VA_ARGS__) CPP_REQUIRES_AUX_
      |     ^
/build/range-v3/include/concepts/concepts.hpp:66:30: note: in expansion of macro ‘CPP_REQUIRES_requires’
   66 | #define CPP_PP_CAT_(X, ...)  X ## __VA_ARGS__
      |                              ^
/build/range-v3/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__)
      |                              ^~~~~~~~~~~
/build/range-v3/include/concepts/concepts.hpp:448:5: note: in expansion of macro ‘CPP_PP_CAT’
  448 |     CPP_PP_CAT(CPP_REQUIRES_, REQS)
      |     ^~~~~~~~~~
/build/range-v3/include/concepts/concepts.hpp:937:9: note: in expansion of macro ‘CPP_requires’
  937 |         CPP_requires(swappable_,
      |         ^~~~~~~~~~~~
make[2]: *** [CMakeFiles/test.range.v3.headers.dir/build.make:2571: CMakeFiles/test.range.v3.headers.dir/headers/range/v3/utility/any.cpp.o] Ошибка 1

You will find full build log at https://salsa.debian.org/debian/range-v3/-/jobs/2065679

ZbigniewRA commented 2 weeks ago

My testing on GCC 11 and 12 shows that current master doesn't have this problem any more. I think this issue can be closed. (Version 0.12 still has this problem.)