I’ve been migrating one of my projects to UE 5.8 these last couple of days and… I don’t know. Maybe it’s just me, but I keep getting this feeling that every version pushes Unreal a little bit further away from plain C++.
I’m not talking about UCLASS, reflection or the object system. Those have always been part of Unreal and that’s fine.
I’m talking about all the little things.
One example:
UE_LOG(LogTemp, Error, TEXT("%s"), e.what());
Now it has to be %hs because e.what() returns const char*.
Sure, changing it takes 5 seconds. That’s not really the issue.
Then I hit another one. A float x; sitting in one of my tutorial headers suddenly starts producing an error inside Chaos because of the Shared PCH. Again, once you understand what’s happening, it makes sense.
That’s kind of my point.
None of these things are difficult. But they keep adding up.
After a while I feel like I’m spending more time remembering Unreal-specific rules than actually writing C++.
Sometimes I honestly wonder whether I’m writing C++ anymore or just Unreal’s own dialect built on top of C++.
Maybe that’s unavoidable for an engine this big.
Maybe it’s the cost of reflection, generated code, the build system, Blueprints and everything else.
But I’d expect the long-term direction to be getting closer to modern C++, not introducing more engine-specific conventions.
I’m curious if other people migrating to 5.8 have had the same impression, or if this is just something you stop noticing after enough years using the engine.
“
%hsisn’t the problem. It’s not a new specifier. What bothers me is having to know an increasingly specific Unreal formatting rule just to log a standard C++ exception.”