On Thu, 10 Dec 2020, Patrick Palka wrote:
> This patch further extends the satisfaction_cache class to diagnose
> self-recursive satisfaction.
>
> With this patch, a few more cmcstl2 tests fail at compile time due apparent
> self-recursive satisfaction. I didn't analyze these failures
> individually, but all errors contain view_interface::operator bool() in
> their template instantiation backtrace, and applying a workaround
> similar to PR97600#c3 to include/stl2/view/view_interface.hpp fixes all
> observed failures.
Whoops, I meant to say #c2 not #c3 here. For the record, here's the
workaround in question:
diff --git a/include/stl2/view/view_interface.hpp
b/include/stl2/view/view_interface.hpp
index ace9e983..dea29896 100644
--- a/include/stl2/view/view_interface.hpp
+++ b/include/stl2/view/view_interface.hpp
@@ -84,14 +84,15 @@ STL2_OPEN_NAMESPACE {
return begin(d) == end(d);
}
- constexpr explicit operator bool()
+ template<same_as<bool> T>
+ constexpr explicit operator T()
// Distinct named concept to workaround
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82740
requires detail::CanEmpty<D> {
return !__stl2::empty(derived());
}
// Distinct named concept to workaround
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82740
- template<detail::CanEmpty = const D> // gcc_bugs_bugs_bugs
- constexpr explicit operator bool() const {
+ template<same_as<bool> T, detail::CanEmpty = const D> //
gcc_bugs_bugs_bugs
+ constexpr explicit operator T() const {
return !__stl2::empty(derived());
}
template<range R = D>