fix AzGenericTypeInfo template handling with clang 12+ (#833) (#1947)

Co-authored-by: Tom spot Callaway <spot@fedoraproject.org>
Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com>

Co-authored-by: Tom "spot" Callaway <72474383+spotaws@users.noreply.github.com>
Co-authored-by: Tom spot Callaway <spot@fedoraproject.org>
main
Esteban Papp 5 years ago committed by GitHub
parent 5bba645521
commit d075d5f7b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -145,8 +145,13 @@ namespace AZ
// also needs to be an overload for every version because they all represent overloads for different non-types. // also needs to be an overload for every version because they all represent overloads for different non-types.
namespace AzGenericTypeInfo namespace AzGenericTypeInfo
{ {
template<typename...> /// Needs to match declared parameter type.
constexpr bool false_v = false; template <template <typename...> class> constexpr bool false_v1 = false;
template <template <AZStd::size_t...> class> constexpr bool false_v2 = false;
template <template <typename, AZStd::size_t> class> constexpr bool false_v3 = false;
template <template <typename, typename, AZStd::size_t> class> constexpr bool false_v4 = false;
template <template <typename, typename, typename, AZStd::size_t> class> constexpr bool false_v5 = false;
template <template <typename, AZStd::size_t, typename> class> constexpr bool false_v6 = false;
template<typename T> template<typename T>
inline const AZ::TypeId& Uuid() inline const AZ::TypeId& Uuid()
@ -157,7 +162,7 @@ namespace AZ
template<template<typename...> class T> template<template<typename...> class T>
inline const AZ::TypeId& Uuid() inline const AZ::TypeId& Uuid()
{ {
static_assert(false_v<T>, "Missing specialization for this template. Make sure it's registered for type info support."); static_assert(false_v1<T>, "Missing specialization for this template. Make sure it's registered for type info support.");
static const AZ::TypeId s_uuid = AZ::TypeId::CreateNull(); static const AZ::TypeId s_uuid = AZ::TypeId::CreateNull();
return s_uuid; return s_uuid;
} }
@ -165,7 +170,7 @@ namespace AZ
template<template<AZStd::size_t...> class T> template<template<AZStd::size_t...> class T>
inline const AZ::TypeId& Uuid() inline const AZ::TypeId& Uuid()
{ {
static_assert(false_v<T>, "Missing specialization for this template. Make sure it's registered for type info support."); static_assert(false_v2<T>, "Missing specialization for this template. Make sure it's registered for type info support.");
static const AZ::TypeId s_uuid = AZ::TypeId::CreateNull(); static const AZ::TypeId s_uuid = AZ::TypeId::CreateNull();
return s_uuid; return s_uuid;
} }
@ -173,7 +178,7 @@ namespace AZ
template<template<typename, AZStd::size_t> class T> template<template<typename, AZStd::size_t> class T>
inline const AZ::TypeId& Uuid() inline const AZ::TypeId& Uuid()
{ {
static_assert(false_v<T>, "Missing specialization for this template. Make sure it's registered for type info support."); static_assert(false_v3<T>, "Missing specialization for this template. Make sure it's registered for type info support.");
static const AZ::TypeId s_uuid = AZ::TypeId::CreateNull(); static const AZ::TypeId s_uuid = AZ::TypeId::CreateNull();
return s_uuid; return s_uuid;
} }
@ -181,7 +186,7 @@ namespace AZ
template<template<typename, typename, AZStd::size_t> class T> template<template<typename, typename, AZStd::size_t> class T>
inline const AZ::TypeId& Uuid() inline const AZ::TypeId& Uuid()
{ {
static_assert(false_v<T>, "Missing specialization for this template. Make sure it's registered for type info support."); static_assert(false_v4<T>, "Missing specialization for this template. Make sure it's registered for type info support.");
static const AZ::TypeId s_uuid = AZ::TypeId::CreateNull(); static const AZ::TypeId s_uuid = AZ::TypeId::CreateNull();
return s_uuid; return s_uuid;
} }
@ -189,7 +194,7 @@ namespace AZ
template<template<typename, typename, typename, AZStd::size_t> class T> template<template<typename, typename, typename, AZStd::size_t> class T>
inline const AZ::TypeId& Uuid() inline const AZ::TypeId& Uuid()
{ {
static_assert(false_v<T>, "Missing specialization for this template. Make sure it's registered for type info support."); static_assert(false_v5<T>, "Missing specialization for this template. Make sure it's registered for type info support.");
static const AZ::TypeId s_uuid = AZ::TypeId::CreateNull(); static const AZ::TypeId s_uuid = AZ::TypeId::CreateNull();
return s_uuid; return s_uuid;
} }
@ -197,7 +202,7 @@ namespace AZ
template<template<typename, AZStd::size_t, typename> class T> template<template<typename, AZStd::size_t, typename> class T>
inline const AZ::TypeId& Uuid() inline const AZ::TypeId& Uuid()
{ {
static_assert(false_v<T>, "Missing specialization for this template. Make sure it's registered for type info support."); static_assert(false_v6<T>, "Missing specialization for this template. Make sure it's registered for type info support.");
static const AZ::TypeId s_uuid = AZ::TypeId::CreateNull(); static const AZ::TypeId s_uuid = AZ::TypeId::CreateNull();
return s_uuid; return s_uuid;
} }

Loading…
Cancel
Save