The behavior is described in https://issues.dlang.org/show_bug.cgi?id=7067. Since the `rng` parameter is `auto ref` this behavior is not obvious merely from the function signature, so at the very least this quirk should be mentioned in the documentation.
Better ways: - split in two overloads and deprecate the by value one - fix random ranges in general by making them non-copyable (like suggested in #7067) However, the latter is a lot of work and it might be easier to just submit a version of mir.random as std.experimental.random and to fully replace std.random (there has been some talk about doing this, but it never materialized.)
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/phobos/issues/10347 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB