On Tuesday, 10 November 2020 at 16:55:11 UTC, Ola Fosheim Grøstad
wrote:
I want to implement a generic function for "a < f(x) < b" that
will give the same result as "(a < f(x)) && (f(x) < b)" for any
conceivable mix of types. Except if that "f(x)" should only be
evaluated once.
Is it sufficient to use "scope ref" in parameters?
I don't want to assume _anything_ about the definition of the
types and the implementation of the comparison operator (can be
overloaded).
bool between(Value, Bound)(auto ref Value value, auto ref Bound
low, auto ref Bound high)
{
return (low < value) && (value < high);
}
You need `auto ref` because either Bound or Value may have
copying disabled. Because the function is a template, attributes
like `scope` will be inferred when applicable (modulo compiler
bugs).