Fix for PR 1367

This commit is contained in:
John Wellbelove 2026-03-28 12:03:12 +00:00
parent b83cef5668
commit 03ca3c817e

View File

@ -85,7 +85,7 @@ namespace etl
#if ETL_USING_CPP11 && !defined(ETL_TYPE_SELECT_FORCE_CPP03_IMPLEMENTATION) #if ETL_USING_CPP11 && !defined(ETL_TYPE_SELECT_FORCE_CPP03_IMPLEMENTATION)
//*************************************************************************** //***************************************************************************
// type_id_lookup // type_id_lookup
//*************************************************************************** //***************************************************************************
template <typename... TTypes> template <typename... TTypes>
struct type_id_lookup struct type_id_lookup
@ -96,21 +96,21 @@ namespace etl
struct nulltype {}; struct nulltype {};
// For N type pairs. // For N type pairs.
template <size_t Id, typename T1, typename... TRest> template <int Id, typename T1, typename... TRest>
struct type_from_id_helper struct type_from_id_helper
{ {
using type = typename etl::conditional<Id == T1::Id, using type = typename etl::conditional<Id == T1::Id,
typename T1::type, typename T1::type,
typename type_from_id_helper<Id, TRest...>::type>::type; typename type_from_id_helper<Id, TRest...>::type>::type;
}; };
// Specialisation for 1 type pair. // Specialisation for 1 type pair.
template <size_t Id, typename T1> template <int Id, typename T1>
struct type_from_id_helper<Id, T1> struct type_from_id_helper<Id, T1>
{ {
using type = typename etl::conditional<Id == T1::Id, using type = typename etl::conditional<Id == T1::Id,
typename T1::type, typename T1::type,
nulltype>::type; nulltype>::type;
}; };
public: public:
@ -171,7 +171,7 @@ namespace etl
{ {
return get_id_from_type<T>(); return get_id_from_type<T>();
} }
//************************************ //************************************
template <typename T> template <typename T>
static unsigned int get_id_from_type() static unsigned int get_id_from_type()
@ -195,16 +195,16 @@ namespace etl
struct type_from_type_helper struct type_from_type_helper
{ {
using type = typename etl::conditional<etl::is_same<T, typename T1::type1>::value, using type = typename etl::conditional<etl::is_same<T, typename T1::type1>::value,
typename T1::type2, typename T1::type2,
typename type_from_type_helper<T, TRest...>::type>::type; typename type_from_type_helper<T, TRest...>::type>::type;
}; };
template <typename T, typename T1> template <typename T, typename T1>
struct type_from_type_helper<T, T1> struct type_from_type_helper<T, T1>
{ {
using type = typename etl::conditional<etl::is_same<T, typename T1::type1>::value, using type = typename etl::conditional<etl::is_same<T, typename T1::type1>::value,
typename T1::type2, typename T1::type2,
nulltype>::type; nulltype>::type;
}; };
public: public:
@ -234,7 +234,7 @@ namespace etl
cog.outl("//***************************************************************************") cog.outl("//***************************************************************************")
cog.outl("template <typename T1,") cog.outl("template <typename T1,")
for n in range(2, int(NTypes)): for n in range(2, int(NTypes)):
cog.outl(" typename T%s = etl::type_id_pair<etl::null_type<0>, -%s>," %(n, n)) cog.outl(" typename T%s = etl::type_id_pair<etl::null_type<0>, -%s>," %(n, n))
cog.outl(" typename T%s = etl::type_id_pair<etl::null_type<0>, -%s> >" %(NTypes, NTypes)) cog.outl(" typename T%s = etl::type_id_pair<etl::null_type<0>, -%s> >" %(NTypes, NTypes))
cog.outl("struct type_id_lookup") cog.outl("struct type_id_lookup")
cog.outl("{") cog.outl("{")
@ -246,17 +246,17 @@ namespace etl
cog.outl(" {") cog.outl(" {")
cog.outl(" typedef ") cog.outl(" typedef ")
for n in range(1, int(NTypes) + 1): for n in range(1, int(NTypes) + 1):
cog.outl(" typename etl::conditional<Id == T%s::Id, typename T%s::type," %(n, n)) cog.outl(" typename etl::conditional<Id == T%s::Id, typename T%s::type," %(n, n))
cog.out(" etl::null_type<0> >") cog.out(" etl::null_type<0> >")
for n in range(1, int(NTypes) + 1): for n in range(1, int(NTypes) + 1):
if n == int(NTypes): if n == int(NTypes):
cog.outl("::type type;") cog.outl("::type type;")
else: else:
cog.out("::type>") cog.out("::type>")
if n % 4 == 0: if n % 4 == 0:
if n != int(NTypes): if n != int(NTypes):
cog.outl("") cog.outl("")
cog.out(" ") cog.out(" ")
cog.outl("") cog.outl("")
cog.outl(" ETL_STATIC_ASSERT(!(etl::is_same<etl::null_type<0>, type>::value), \"Invalid id\");") cog.outl(" ETL_STATIC_ASSERT(!(etl::is_same<etl::null_type<0>, type>::value), \"Invalid id\");")
cog.outl(" };") cog.outl(" };")
@ -274,7 +274,7 @@ namespace etl
cog.outl(" {") cog.outl(" {")
cog.outl(" value =") cog.outl(" value =")
for n in range(1, int(NTypes) + 1) : for n in range(1, int(NTypes) + 1) :
cog.outl(" (unsigned int) etl::is_same<T, typename T%s::type>::value ? (unsigned int)T%s::Id :" % (n, n)) cog.outl(" (unsigned int) etl::is_same<T, typename T%s::type>::value ? (unsigned int)T%s::Id :" % (n, n))
cog.outl(" (unsigned int) UNKNOWN") cog.outl(" (unsigned int) UNKNOWN")
cog.outl(" };") cog.outl(" };")
cog.outl("") cog.outl("")
@ -301,7 +301,7 @@ namespace etl
cog.outl("//***************************************************************************") cog.outl("//***************************************************************************")
cog.outl("template <typename T1,") cog.outl("template <typename T1,")
for n in range(2, int(NTypes)): for n in range(2, int(NTypes)):
cog.outl(" typename T%s = etl::type_type_pair<etl::null_type<0>, etl::null_type<0> >," %n) cog.outl(" typename T%s = etl::type_type_pair<etl::null_type<0>, etl::null_type<0> >," %n)
cog.outl(" typename T%s = etl::type_type_pair<etl::null_type<0>, etl::null_type<0> > >" %NTypes) cog.outl(" typename T%s = etl::type_type_pair<etl::null_type<0>, etl::null_type<0> > >" %NTypes)
cog.outl("struct type_type_lookup") cog.outl("struct type_type_lookup")
cog.outl("{") cog.outl("{")
@ -313,17 +313,17 @@ namespace etl
cog.outl(" {") cog.outl(" {")
cog.outl(" typedef ") cog.outl(" typedef ")
for n in range(1, int(NTypes) + 1): for n in range(1, int(NTypes) + 1):
cog.outl(" typename etl::conditional<etl::is_same<T, typename T%s::type1>::value, typename T%s::type2," %(n, n)) cog.outl(" typename etl::conditional<etl::is_same<T, typename T%s::type1>::value, typename T%s::type2," %(n, n))
cog.out(" etl::null_type<0> >") cog.out(" etl::null_type<0> >")
for n in range(1, int(NTypes) + 1): for n in range(1, int(NTypes) + 1):
if n == int(NTypes): if n == int(NTypes):
cog.outl("::type type;") cog.outl("::type type;")
else: else:
cog.out("::type>") cog.out("::type>")
if n % 8 == 0: if n % 8 == 0:
if n != int(NTypes): if n != int(NTypes):
cog.outl("") cog.outl("")
cog.out(" ") cog.out(" ")
cog.outl("") cog.outl("")
cog.outl(" ETL_STATIC_ASSERT(!(etl::is_same<etl::null_type<0>, type>::value), \"Invalid type\");") cog.outl(" ETL_STATIC_ASSERT(!(etl::is_same<etl::null_type<0>, type>::value), \"Invalid type\");")
cog.outl(" };") cog.outl(" };")
@ -334,4 +334,4 @@ namespace etl
#endif #endif
} }
#endif #endif