1#ifndef VEG_CORE_HPP_GJCBNFLAS
2#define VEG_CORE_HPP_GJCBNFLAS
8#if defined(VEG_WITH_CXX20_SUPPORT) && \
9 !VEG_HAS_BUILTIN(__builtin_is_constant_evaluated)
11#define VEG_HAS_CONSTEVAL 1
12#define VEG_IS_CONSTEVAL() ::std::is_constant_evaluated()
13#elif VEG_HAS_BUILTIN(__builtin_is_constant_evaluated)
14#define VEG_HAS_CONSTEVAL 1
15#define VEG_IS_CONSTEVAL() __builtin_is_constant_evaluated()
17#define VEG_HAS_CONSTEVAL 0
30 return VEG_IS_CONSTEVAL();
47 template<
typename T,
typename F>
53 template<
typename T,
typename F>
63template<
template<
typename...>
class F,
typename... Ts>
68template<
template<
typename...>
class F>
71 template<
typename... Ts>
82template<
bool B,
typename T,
typename F>
88template<
typename... Preds>
90template<
typename... Preds>
100template<
typename First,
typename... Preds>
102 :
if_t<First::value, First, disjunction<Preds...>>
105template<
typename First,
typename... Preds>
107 :
if_t<First::value, conjunction<Preds...>, First>
117template<
typename Ret,
typename... Args>
120#if defined(VEG_WITH_CXX17_SUPPORT)
121template<
typename Ret,
typename... Args>
126template<
typename T, usize N>
132#if defined(VEG_WITH_CXX14_SUPPORT)
134template<
typename Enable,
template<
typename...>
class Ftor,
typename... Args>
135constexpr bool _is_detected_v =
false;
136template<
template<
typename...>
class Ftor,
typename... Args>
137constexpr bool _is_detected_v<
meta::void_t<Ftor<Args...>>, Ftor, Args...> =
140template<
template<
typename...>
class Op,
typename... Args>
141constexpr bool is_detected_v = _is_detected_v<void, Op, Args...>;
145template<
typename Enable,
template<
typename...>
class Ftor,
typename... Args>
150template<
template<
typename...>
class Ftor,
typename... Args>
156template<
typename Default,
template<
typename...>
class Ftor,
typename... Args>
160template<
template<
typename...>
class Op,
typename... Args>
176template<
typename Base>
183template<
typename Base,
typename Derived>
207template<
typename T,
typename = true_type>
222#if defined(VEG_WITH_CXX20_SUPPORT)
225 requires {
typename Op<Args...>; });
226#elif defined(VEG_WITH_CXX14_SUPPORT)
229 _detail::_meta::is_detected_v<Op, Args...>);
245 VEG_CONCEPT(same<void const volatile, T const volatile>));
257#if VEG_HAS_BUILTIN(__is_complete_type)
272template<
typename Default,
template<
typename...>
class Op,
typename... Args>
277template<
template<
typename...>
class Op,
typename... Args>
281template<
template<
typename...>
class Op,
typename... Args>
284template<
template<
typename...>
class Op,
typename... Args>
#define VEG_DEF_CONCEPT_BUILTIN_OR_INTERNAL(Tpl, Name,...)
#define VEG_NIEBLOID(Name)
#define VEG_DEF_CONCEPT(Tpl, Name,...)
meta::type_identity_t< T > DoNotDeduce
#define VEG_HAS_BUILTIN_OR(Builtin, True, False)