Also something that is confusing to me from this process is that, if the standard specifies that the return values from generate_canonical are to be smaller than 1, then why is the standard concerned with implementation problems? why does LWG 2525 even exist? If the standard says it should return values in [0,1), and implementations don’t respect that, then that’s hardly a problem of the standard right?
That seems to be an implementation problem, and is properly addressed at the implementation level by
GCC #63176
The GCC solution is non-conforming. We are implementing p0952 as a better solution.
This isn't fixed yet, as far as I know.
The MSVC solution was to implement p0952 which means it is not conforming to the old spec, because it sometimes discards random numbers.
So it's not just an implementation problem if the spec is implementable, and so implementations can only be fixed by either breaking the rules of the standard or changing the standard.