1#ifndef VEG_CONSTRUCTIBLE_HPP_D6CRVBJYS
2#define VEG_CONSTRUCTIBLE_HPP_D6CRVBJYS
15#if VEG_HAS_BUILTIN(__is_final) || defined(VEG_WITH_CXX14_SUPPORT)
24 noexcept(
static_cast<T*
>(
nullptr)->~T()));
27 trivially_destructible,
28 std::is_trivially_destructible<T>::value);
33 trivially_default_constructible,
34 is_trivially_constructible,
38 trivially_copy_constructible,
39 is_trivially_constructible,
43 trivially_move_constructible,
44 is_trivially_constructible,
50 inplace_constructible,
51 new(
static_cast<void*
>(
nullptr)) T(
VEG_DECLVAL(Ts&&)...),
60 nothrow_constructible,
70 implicitly_constructible,
76 __is_constructible(T, T&&),
82 __is_nothrow_constructible(T, T&&),
93struct is_trivially_constructible;
96struct is_trivially_relocatable;
102template<
bool,
template<
typename>
class Trait,
typename T>
106template<
template<
typename>
class Trait,
typename Tuple>
109template<
template<
typename>
class Trait,
115 SimpleITuple<_meta::integer_sequence<usize, Is...>, Ts Bases::*...>>
119template<
template<
typename>
class Trait,
typename T>
123 decltype(_detail::member_extract_access<T>::Type::member_pointers())>
126template<
template<
typename>
class Trait,
typename T>
140 VEG_CONCEPT(trivially_default_constructible<T>),
142 _detail::_cpo::extract_members_deduce_trait<is_trivially_relocatable, T>>
148 VEG_CONCEPT(trivially_copyable<T>) &&
149 VEG_CONCEPT(trivially_move_constructible<T>),
151 _detail::_cpo::extract_members_deduce_trait<is_trivially_relocatable, T>>
186template<
typename Fn,
typename T>
#define VEG_CONCEPT_EXPR(Tpl, TplNames, Name, Expr,...)
#define VEG_DEF_CONCEPT(Tpl, Name,...)
decltype(sizeof(0)) usize
#define VEG_HAS_BUILTIN_OR(Builtin, True, False)
#define VEG_DEF_CONCEPT_FROM_BUILTIN_OR_TRAIT(Tpl, Trait, Std_Trait,...)
#define VEG_DEF_CONCEPT_FROM_BUILTIN_OR_STD(Tpl, Trait,...)
#define VEG_NOEXCEPT_IF(...)
VEG_INLINE constexpr auto operator()() const &&VEG_NOEXCEPT_IF(VEG_CONCEPT(nothrow_copyable< T >)) -> T
VEG_INLINE constexpr auto operator()() const &&VEG_NOEXCEPT_IF(VEG_CONCEPT(nothrow_constructible< T >)) -> T
VEG_INLINE constexpr auto operator()() const &&VEG_NOEXCEPT_IF(VEG_CONCEPT(nothrow_movable< T >)) -> T
VEG_INLINE constexpr auto operator()() const &&-> decltype(VEG_FWD(fn)(VEG_FWD(arg)))