From 2c85439da00fa7277ef39d23ad29b6da9dd690e0 Mon Sep 17 00:00:00 2001 From: Ignacio Etcheverry Date: Sun, 21 Jul 2019 23:25:44 +0200 Subject: [PATCH] Make it a build error if a GetTypeInfo specialization cannot be resolved Previously it was a runtime error message. --- core/type_info.h | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/core/type_info.h b/core/type_info.h index d85a63ee424..61ec7b2f20b 100644 --- a/core/type_info.h +++ b/core/type_info.h @@ -83,15 +83,13 @@ enum Metadata { }; } +// If the compiler fails because it's trying to instantiate the primary 'GetTypeInfo' template +// instead of one of the specializations, it's most likely because the type 'T' is not supported. +// If 'T' is a class that inherits 'Object', make sure it can see the actual class declaration +// instead of a forward declaration. You can always forward declare 'T' in a header file, and then +// include the actual declaration of 'T' in the source file where 'GetTypeInfo' is instantiated. template -struct GetTypeInfo { - static const Variant::Type VARIANT_TYPE = Variant::NIL; - static const GodotTypeInfo::Metadata METADATA = GodotTypeInfo::METADATA_NONE; - static inline PropertyInfo get_class_info() { - ERR_PRINT("GetTypeInfo fallback. Bug!"); - return PropertyInfo(); // Not "Nil", this is an error - } -}; +struct GetTypeInfo; #define MAKE_TYPE_INFO(m_type, m_var_type) \ template <> \ @@ -283,10 +281,7 @@ inline StringName __constant_get_enum_name(T param, const String &p_constant) { return GetTypeInfo::get_class_info().class_name; } -#define CLASS_INFO(m_type) \ - (GetTypeInfo::VARIANT_TYPE != Variant::NIL ? \ - GetTypeInfo::get_class_info() : \ - GetTypeInfo::get_class_info()) +#define CLASS_INFO(m_type) (GetTypeInfo::get_class_info()) #else