replace is clearer in the first case, because you're getting the return
value.
...
I am really trying hard to understand this, but your reasons for first is
clearer then the second makes no sense to me i am sorry.
I still think second is clearer, but whatever, as long as i can see the
interface or the doc, i am fine.
string replace(string, ...);
void replace(ref string, ...);
Regardless, I don't see anything wrong with naming functions in a manner
that
implies that a functional style is the default
I am not against enforcing such a rule, i am against doing it implicitly
and work with assumptions.
Just check boost/string/replace, they have in place replaces default too.
You might not like boost (some don't) but it is the closest example to D.