Another rabbit hole, so now it is a blog post. "C++ vector math library codegen in Debug build". Long read, some conclusions at the end. https://aras-p.info/blog/2024/09/14/Vector-math-library-codegen-in-Debug/
Vector math library codegen in Debug · Aras' website

Aras' website
@aras heh, when spelunking disassembly recently i noticed we were globally enabling JMC on *release* builds, due to some ancient issue with library versioning. glad i found that before shipping :') msvc sure does have some fun curveballs.
@aras btw it's not mentioned in the blog, but one thing you can often do is enable force inlining on the hot functions, which can help a bit since for most compilers that applies on the no optimizations build as well.
@dotstdy can you actually do that on MSVC? How?
@aras @dotstdy AFAIK, you can't. Even __forceinline is a hint to the compiler, albeit a very strong one.
It will, however, honour that hint in almost all cases.
@molecularmusing @aras yeah it'll refuse in some cases still, but for the most part (and especially for small functions like in a vector library) it should end up inlining them regardless of the compilation mode if you use forceinline.
@dotstdy @molecularmusing that’s just not my experience. /Od by default inlines *nothing*, ie it implies /Ob0. The only next choice is /Ob1 which is “in-line almost everything”. There’s no setting that tells “only force inlined functions plz” https://learn.microsoft.com/en-us/cpp/build/reference/ob-inline-function-expansion?view=msvc-170
/Ob (Inline Function Expansion)

Learn more about: /Ob (Inline Function Expansion)

@aras @molecularmusing another reason for never using msvc I guess :')
@dotstdy @aras There's [[msvc:forceinline], can you try what that does and if it works in debug builds?
@molecularmusing @dotstdy the docs say it is exactly the same as __forceinline. But I have not checked.
@aras @molecularmusing @dotstdy #define will always inline! 😜