Lots of engine UStructs losing their UStruct status during version updates?

I’ve noticed an annoying pattern over the last few updates of UStructs no longer being UStructs. (As in, they’re just structs, which can’t be UProperties or parameters in UFunctions).

This causes an annoying chain of having to either replace the old UStructs with functionally identical custom UStructs, or hiding UProperties and UFunctions from blueprint.

While this isn’t usually a big deal, in 4.17, there have been some of these that just make no sense. For instance, FComponentReference’s main job appears to be a way to expose a way for one component to reference another in a way that can be set in the editor. But as of 4.17, this isn’t a UStruct any more, which means the editor can’t see it, so what’s the point?

Does anyone know what’s going on with this? Having to work around or replace the functionality of these UStructs to be able to expose them to the editor again is actually accounting for the majority of the time I spend updating engine versions, and it seems like it’s getting worse every release. :frowning:

FComponentReference has not been changed as far as I can see.

I figured out the problem.

There were a bunch of additional requirements and failure checks added to the BlueprintType specifier in 4.17. FComponentReference and the other structs I’m seeing this problem with are not, and never were, BlueprintType. Not being a BlueprintType causes a compile error in 4.17 if a UPROPERTY is marked as blueprint-accessible (BlueprintReadOnly, BlueprintReadWrite) or a UFUNCTION which is BlueprintCallable uses it as a return type or a parameter. This was not the case in 4.16.

So same symptoms as the UStructs that got demoted to just be regular Structs in 4.16, but a different cause.