Deriving from `Conditionally{Constructible,Assignable}` publicly rather than
privately is more natural after all. I was mistaken before.

They define public members. Special member functions have peculiar defaulting
rules so the derived class has them public either way, but the principle stands.

PiperOrigin-RevId: 889836994
diff --git a/riegeli/base/hybrid_direct_map.h b/riegeli/base/hybrid_direct_map.h
index 2c5dada..3fa1f5c 100644
--- a/riegeli/base/hybrid_direct_map.h
+++ b/riegeli/base/hybrid_direct_map.h
@@ -203,10 +203,9 @@
           typename Traits = HybridDirectTraits<Key>>
 class HybridDirectMap
     : public hybrid_direct_internal::HybridDirectMapImpl<Key, Value, Traits>,
-      private ConditionallyConstructible<std::is_copy_constructible_v<Value>,
-                                         true>,
-      private ConditionallyAssignable<std::is_copy_constructible_v<Value>,
-                                      true>,
+      public ConditionallyConstructible<std::is_copy_constructible_v<Value>,
+                                        true>,
+      public ConditionallyAssignable<std::is_copy_constructible_v<Value>, true>,
       public WithEqual<HybridDirectMap<Key, Value, Traits>> {
  private:
   template <typename Src, typename Enable = void>
diff --git a/riegeli/base/invoker.h b/riegeli/base/invoker.h
index f671d13..0040d0e 100644
--- a/riegeli/base/invoker.h
+++ b/riegeli/base/invoker.h
@@ -37,7 +37,7 @@
 
 template <typename Function, typename... Args>
 class InvokerBase
-    : private ConditionallyAssignable<
+    : public ConditionallyAssignable<
           std::conjunction_v<std::negation<std::is_reference<Args>>...>> {
  protected:
   template <typename DependentFunction = Function>
diff --git a/riegeli/base/maker.h b/riegeli/base/maker.h
index 831f109..32f887a 100644
--- a/riegeli/base/maker.h
+++ b/riegeli/base/maker.h
@@ -47,7 +47,7 @@
 // functions.
 template <typename... Args>
 class MakerType
-    : private ConditionallyAssignable<
+    : public ConditionallyAssignable<
           std::conjunction_v<std::negation<std::is_reference<Args>>...>> {
  public:
   // Constructs `MakerType` from `args...` convertible to `Args...`.
@@ -212,7 +212,7 @@
 // caller to deduce `T`, e.g. using `TargetT`.
 template <typename T, typename... Args>
 class MakerTypeFor
-    : private ConditionallyAssignable<
+    : public ConditionallyAssignable<
           std::conjunction_v<std::negation<std::is_reference<Args>>...>> {
  public:
   // Constructs `MakerTypeFor` from `args...` convertible to `Args...`.
diff --git a/riegeli/base/moving_dependency.h b/riegeli/base/moving_dependency.h
index fd0d877..1905c70 100644
--- a/riegeli/base/moving_dependency.h
+++ b/riegeli/base/moving_dependency.h
@@ -306,9 +306,9 @@
     std::enable_if_t<!Dependency<Handle, Manager>::kIsStable>>
     : public moving_dependency_internal::MovingDependencyImpl<Handle, Manager,
                                                               Mover>,
-      private ConditionallyConstructible<
+      public ConditionallyConstructible<
           false, std::is_move_constructible_v<Dependency<Handle, Manager>>>,
-      private ConditionallyAssignable<
+      public ConditionallyAssignable<
           false, std::is_move_assignable_v<Dependency<Handle, Manager>>> {
  public:
   using MovingDependency::MovingDependencyImpl::MovingDependencyImpl;
diff --git a/riegeli/base/stable_dependency.h b/riegeli/base/stable_dependency.h
index f2895ad..a4100b9 100644
--- a/riegeli/base/stable_dependency.h
+++ b/riegeli/base/stable_dependency.h
@@ -228,9 +228,9 @@
     : public dependency_internal::DependencyDerived<
           dependency_internal::StableDependencyNoDefault<Handle, Manager>,
           Handle, Manager>,
-      private ConditionallyConstructible<
+      public ConditionallyConstructible<
           false, std::is_move_constructible_v<Dependency<Handle, Manager>>>,
-      private ConditionallyAssignable<
+      public ConditionallyAssignable<
           false, std::is_move_assignable_v<Dependency<Handle, Manager>>> {
  public:
   using StableDependency::DependencyDerived::DependencyDerived;
diff --git a/riegeli/base/type_traits.h b/riegeli/base/type_traits.h
index 9784364..852d158 100644
--- a/riegeli/base/type_traits.h
+++ b/riegeli/base/type_traits.h
@@ -409,7 +409,7 @@
            std::is_convertible_v<decltype(std::declval<T>() == nullptr), bool>>>
     : std::true_type {};
 
-// Deriving a class (possibly privately) from
+// Deriving a class from
 // `ConditionallyConstructible<copy_constructible, move_constructible>`
 // disables copy constructor if `!copy_constructible`, and
 // disables move constructor if `!move_constructible`.
@@ -470,7 +470,7 @@
   ConditionallyConstructible& operator=(ConditionallyConstructible&&) = default;
 };
 
-// Deriving a class (possibly privately) from
+// Deriving a class from
 // `ConditionallyAssignable<copy_assignable, move_assignable>`
 // disables copy assignment if `!copy_assignable`, and
 // disables move assignment if `!move_assignable`.