The answer is no. Anything else would be a bug in the compiler.
tkUnknown
is the indication that there is no type info available which might be the case for discontiguous enumerations and enumerations which don't start at zero (as explained by Barry here) and some types from long ago (like Real48
).
It also is returned by TValue.Kind
when TValue.IsEmpty
is true. (since XE2 afaik before it also could return True in cases where it held a reference type that was nil which was a bug).
When you are retrieving RTTI for something that does not contain type info (like a field, property or parameter of a type that has no type info) your RTTI information is incomplete. TRttiField.FieldType
and TRttiProperty.PropertyType
return nil in these cases and the array returned by TRttiMethod.GetParameters
is incomplete.
While it is possible to call TValue.Make<T>
with a type that has no type info you will not be able to do much with this because its TypeInfo will be nil. The compiler obviously works around E2134 and passes nil to TValue.Make
. Thus TValue.Kind
will say tkUnknown
.