fixed when ret in enable_if<false, ret> is invalid

dev
Bill 2 years ago
parent 95d94468a9
commit e199c6700a

@ -720,51 +720,56 @@ inline void TableInfo<Types...>::print(const char* __restrict sep, const char* _
std::cout << end; std::cout << end;
} }
} }
// use std::is_base_of here and all vt classes should derive from vector_base
template <class T1, template <class T1,
template<typename> class VT, template<typename> class VT,
class TRet> class TRet>
using test_vt_support = typename std::enable_if_t<std::is_same_v<VT<T1>, ColRef<T1>> || using test_vt_support = typename std::enable_if_t<
std::is_same_v<VT<T1>, ColView<T1>> || std::is_base_of_v<vector_base<T1>, VT<T1>>,
std::is_same_v<VT<T1>, vector_type<T1>>, TRet>; TRet>;
template <class T1, class T2,
template<typename> class VT>
using get_autoext_type = test_vt_support<T1, VT,
decayed_t<VT, typename types::Coercion<T1, T2>::type>>;
template <class T1, class T2, template <class T1, class T2, template<typename> class VT,
template<typename> class VT> test_vt_support<T1, VT, void>* = nullptr>
using get_long_type = test_vt_support<T1, VT, using get_autoext_type =
decayed_t<VT, types::GetLongType<typename types::Coercion<T1, T2>::type>>>; decayed_t<VT, typename types::Coercion<T1, T2>::type>;
template <class T1, class T2, template <class T1, class T2, template<typename> class VT,
template<typename> class VT> test_vt_support<T1, VT, void>* = nullptr>
using get_fp_type = test_vt_support<T1, VT, using get_long_type =
decayed_t<VT, types::GetFPType<typename types::Coercion<T1, T2>::type>>>; decayed_t<VT, types::GetLongType<typename types::Coercion<T1, T2>::type>>;
template <class T1, class T2, template<typename> class VT,
test_vt_support<T1, VT, void>* = nullptr>
using get_fp_type =
decayed_t<VT, types::GetFPType<typename types::Coercion<T1, T2>::type>>;
template <class T1, template <class T1,
template<typename> class VT, template<typename> class VT2, template<typename> class VT, template<typename> class VT2,
class TRet> class TRet>
using test_vt_support2 = typename std::enable_if_t<(std::is_same_v<VT<T1>, ColRef<T1>> || using test_vt_support2 = typename std::enable_if_t<
std::is_same_v<VT<T1>, ColView<T1>> || std::is_base_of_v<vector_base<T1>, VT<T1>> &&
std::is_same_v<VT<T1>, vector_type<T1>>) && std::is_base_of_v<vector_base<T1>, VT2<T1>>,
(std::is_same_v<VT2<T1>, ColRef<T1>> || TRet >;
std::is_same_v<VT2<T1>, ColView<T1>> ||
std::is_same_v<VT2<T1>, vector_type<T1>>), TRet >;
template <class T1, class T2, template <class T1, class T2,
template<typename> class VT, template<typename> class VT2> template<typename> class VT, template<typename> class VT2,
using get_autoext_type2 = test_vt_support2<T1, VT, VT2, test_vt_support2<T1, VT, VT2, void>* = nullptr >
decayed_t<VT, typename types::Coercion<T1, T2>::type>>; using get_autoext_type2 =
decayed_t<VT, typename types::Coercion<T1, T2>::type>;
template <class T1, class T2, template <class T1, class T2,
template<typename> class VT, template<typename> class VT2> template<typename> class VT, template<typename> class VT2,
using get_long_type2 = test_vt_support2<T1, VT, VT2, test_vt_support2<T1, VT, VT2, void>* = nullptr >
decayed_t<VT, types::GetLongType<typename types::Coercion<T1, T2>::type>>>; using get_long_type2 =
decayed_t<VT, types::GetLongType<typename types::Coercion<T1, T2>::type>>;
template <class T1, class T2, template <class T1, class T2,
template<typename> class VT, template<typename> class VT2> template<typename> class VT, template<typename> class VT2,
using get_fp_type2 = test_vt_support2<T1, VT, VT2, test_vt_support2<T1, VT, VT2, void>* = nullptr >
decayed_t<VT, types::GetFPType<typename types::Coercion<T1, T2>::type>>>; using get_fp_type2 =
decayed_t<VT, types::GetFPType<typename types::Coercion<T1, T2>::type>>;
template <class T1, class T2, template<typename> class VT, template<typename> class VT2> template <class T1, class T2, template<typename> class VT, template<typename> class VT2>
get_autoext_type2<T1, T2, VT, VT2> get_autoext_type2<T1, T2, VT, VT2>

@ -19,6 +19,7 @@
#pragma pack(push, 1) #pragma pack(push, 1)
template<class T> template<class T>
struct vector_base {}; struct vector_base {};
struct vectortype_cstorage{ struct vectortype_cstorage{
void* container; void* container;
unsigned int size, capacity; unsigned int size, capacity;

Loading…
Cancel
Save