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`.