52 #ifndef LIB_META_VALUE_TYPE_BINDING_H 53 #define LIB_META_VALUE_TYPE_BINDING_H 70 template<
typename X,
typename XX =
typename X::value_type
71 ,
typename XY =
typename X::reference
72 ,
typename XZ =
typename X::pointer
80 static No_t check(...);
83 static const bool value = (
sizeof(
Yes_t)==
sizeof(check<TY>(0)));
88 : __and_<has_nested_ValueTypeBindings< remove_reference_t<X> >
89 ,__not_<is_StringLike< remove_reference_t<X> >
107 template<
typename TY,
typename SEL =
void>
110 using value_type =
typename RefTraits<TY>::Value;
111 using reference =
typename RefTraits<TY>::Reference;
112 using pointer =
typename RefTraits<TY>::Pointer;
116 template<
typename TY>
119 using _SrcType =
typename RefTraits<TY>::Value;
121 using value_type =
typename _SrcType::value_type;
122 using reference =
typename _SrcType::reference;
123 using pointer =
typename _SrcType::pointer;
138 template<
typename T1,
typename T2,
bool = has_TypeResult<std::common_type<T1,T2>>()>
143 template<
typename T1,
typename T2>
147 using _Common = std::common_type_t<T1,T2>;
149 static constexpr
bool isConst = isConst_v<T1> or isConst_v<T2>;
150 static constexpr
bool isRef = isLRef_v<T1> and isLRef_v<T2>;
152 using _ConstT = std::conditional_t<isConst
156 using _ValRef = std::conditional_t<isRef
157 , std::add_lvalue_reference_t<_ConstT>
158 , std::remove_reference_t<_ConstT>
161 using ResType = _ValRef;
162 using value_type =
typename RefTraits<ResType>::Value;
163 using reference =
typename RefTraits<ResType>::Reference;
164 using pointer =
typename RefTraits<ResType>::Pointer;
Implementation namespace for support and library code.
Helpers for type detection, type rewriting and metaprogramming.
Lumiera error handling (C++ interface).