std::is_constructible<T, const Replaceable<T>&>::value ||
std::is_constructible<T, const Replaceable<T>&&>::value> {};
std::is_constructible<T, const Replaceable<T>&>::value ||
std::is_constructible<T, const Replaceable<T>&&>::value> {};
std::is_convertible<Replaceable<T>&&, T>::value ||
std::is_convertible<const Replaceable<T>&, T>::value ||
std::is_convertible<const Replaceable<T>&&, T>::value> {};
std::is_convertible<Replaceable<T>&&, T>::value ||
std::is_convertible<const Replaceable<T>&, T>::value ||
std::is_convertible<const Replaceable<T>&&, T>::value> {};
} // namespace replaceable_detail
// Type trait template to statically test whether a type is a specialization of
} // namespace replaceable_detail
// Type trait template to statically test whether a type is a specialization of
// Function to make a Replaceable with a type deduced from its input
template <class T>
constexpr Replaceable<std::decay_t<T>> make_replaceable(T&& t) {
// Function to make a Replaceable with a type deduced from its input
template <class T>
constexpr Replaceable<std::decay_t<T>> make_replaceable(T&& t) {
std::enable_if_t<
std::is_constructible<T, std::initializer_list<U>, Args&&...>::value,
int> = 0>
std::enable_if_t<
std::is_constructible<T, std::initializer_list<U>, Args&&...>::value,
int> = 0>
!std::is_same<Replaceable<T>, std::decay_t<U>>::value &&
std::is_convertible<U&&, T>::value,
int> = 0>
!std::is_same<Replaceable<T>, std::decay_t<U>>::value &&
std::is_convertible<U&&, T>::value,
int> = 0>
!std::is_same<Replaceable<T>, std::decay_t<U>>::value &&
!std::is_convertible<U&&, T>::value,
int> = 0>
!std::is_same<Replaceable<T>, std::decay_t<U>>::value &&
!std::is_convertible<U&&, T>::value,
int> = 0>
- !replaceable_detail::is_constructible_from_replaceable_v<T> &&
- !replaceable_detail::is_convertible_from_replaceable_v<T> &&
+ !replaceable_detail::is_constructible_from_replaceable<
+ T>::value &&
+ !replaceable_detail::is_convertible_from_replaceable<T>::value &&
std::is_convertible<const U&, T>::value,
int> = 0>
/* implicit */ Replaceable(const Replaceable<U>& other)
std::is_convertible<const U&, T>::value,
int> = 0>
/* implicit */ Replaceable(const Replaceable<U>& other)
- !replaceable_detail::is_constructible_from_replaceable_v<T> &&
- !replaceable_detail::is_convertible_from_replaceable_v<T> &&
+ !replaceable_detail::is_constructible_from_replaceable<
+ T>::value &&
+ !replaceable_detail::is_convertible_from_replaceable<T>::value &&
!std::is_convertible<const U&, T>::value,
int> = 0>
explicit Replaceable(const Replaceable<U>& other)
!std::is_convertible<const U&, T>::value,
int> = 0>
explicit Replaceable(const Replaceable<U>& other)
- !replaceable_detail::is_constructible_from_replaceable_v<T> &&
- !replaceable_detail::is_convertible_from_replaceable_v<T> &&
+ !replaceable_detail::is_constructible_from_replaceable<
+ T>::value &&
+ !replaceable_detail::is_convertible_from_replaceable<T>::value &&
std::is_convertible<U&&, T>::value,
int> = 0>
/* implicit */ Replaceable(Replaceable<U>&& other)
std::is_convertible<U&&, T>::value,
int> = 0>
/* implicit */ Replaceable(Replaceable<U>&& other)
- !replaceable_detail::is_constructible_from_replaceable_v<T> &&
- !replaceable_detail::is_convertible_from_replaceable_v<T> &&
+ !replaceable_detail::is_constructible_from_replaceable<
+ T>::value &&
+ !replaceable_detail::is_convertible_from_replaceable<T>::value &&
!std::is_convertible<U&&, T>::value,
int> = 0>
explicit Replaceable(Replaceable<U>&& other)
!std::is_convertible<U&&, T>::value,
int> = 0>
explicit Replaceable(Replaceable<U>&& other)