There are a few points in the API that are pretty messy.
Definition of constants
Lack of GDB/LLDB support for our CPP strings
Support C++ in windows
Max Path Length in windows isn't always 256, you can for example use a \\?\ prefix in older windows to allow longer paths (up to 32kbs ish).
I'm not going to support UNC paths (the \\?\ prefix) though (let's document that though).
I don't want to support an absurd stack array of anything above a couple thousand bytes. So we should require a buffer to be passed in for the cases of long paths, but we should allow overriding the path length for the case of windows.
Also I'm not entirely sure why we are handling the case of non-restrict, I doubt that'll apply to both windows & linux so we can likely skip a copy on one of those cases.