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()));
28 std::is_trivially_destructible<T>::value);
34 is_trivially_constructible,
39 is_trivially_constructible,
44 is_trivially_constructible,
51 new(
static_cast<void*
>(
nullptr)) T(
VEG_DECLVAL(Ts&&)...),
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,
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,...)
#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)))