9#ifndef STLAB_CONCURRENCY_TRAITS_HPP
10#define STLAB_CONCURRENCY_TRAITS_HPP
22#include <stlab/config.hpp>
29STLAB_VERSION_NAMESPACE_BEGIN()
47template <template <typename> class test, typename T>
54constexpr bool smart_is_copy_constructible_v = smart_is_copy_constructible<T>::value;
59using enable_if_copyable = std::enable_if_t<smart_is_copy_constructible_v<T>>;
62using enable_if_not_copyable = std::enable_if_t<!smart_is_copy_constructible_v<T>>;
67#if __GNUC__ < 5 && !defined __clang__
73template <
typename... Ts>
74using void_t =
typename voider<Ts...>::type;
83 nonesuch(nonesuch
const&) =
delete;
84 void operator=(nonesuch
const&) =
delete;
88template <
class Default,
class,
template <
class...>
class Op,
class... Args>
90 using value_t = std::false_type;
95template <
class Default,
template <
class...>
class Op,
class... Args>
96struct detector<Default, void_t<Op<Args...>>, Op, Args...> {
97 using value_t = std::true_type;
98 using type = Op<Args...>;
101template <
template <
class...>
class Op,
class... Args>
104template <
template <
class...>
class Op,
class... Args>
105constexpr bool is_detected_v = is_detected<Op, Args...>::value;
107template <
template <
class...>
class Op,
class... Args>
114STLAB_VERSION_NAMESPACE_END()
Definition reverse.hpp:28
Trait adapter; specialize for types where std::is_copy_constructible is wrong.
Definition traits.hpp:48