Just a guess, maybe it's related to the gcc toolchain from 5.4 to 11.3.
Long ago we used constexpr constructors in the main Arduino API classes like Print, String, Wire, SPI. With the old gcc 5.4, this caused those static classes to be fully initialized at compile time. But apparently that behavior wasn't fully guaranteed by the C++ spec. It's has been added as constinit by C++20, but we're so far only using C++17. Quite a bit of work went into experimenting with different syntax to get the constinit behavior back. I believe 1.59 has that work, but since it's easy to try you might as well try
1.60-beta5 to see if it makes this problem magically disappear.
This constinit stuff only matters if you use Print or String or other stuff not part of your custom class in its constructor(s). Of course there is general C++
guidance that you really shouldn't do such things in any class with static instances. But the reality of classes like String, Print, Wire, SPI is people expect code from ordinary functions to be work if copied into C++ constructors. If you've done that, it definitely would have worked with the old version before the toolchain update. It should also work with the latest. Or maybe "should" isn't quite the right word. From a pure C++ language specification perspective, before C++20 constinit didn't even exist so it was never officially possible. But unofficially, it worked great with gcc 5.4. Also unofficially, we found a syntax that seems to always work with 11.3. So this is getting into multiple levels of guesswork... maybe your struct is somehow similar to custom classes? Maybe it's somehow being used early as static constructors are being run?
To really help, I need you to craft a (hopefully small) sample program which reproduces the problem. I still have a few old Teensy LCs here for testing, so if you give a complete program, I can give it a try here.