C++のときに
int& foo(int& val) {return val;}
const int& foo(const int& val) {return val;}
みたいに同じ関数のconst版を書かないといけないケースがあったと思うんだけど

Dでも
ref int foo(ref int val) {return val;}
const ref int foo(const ref int val) {return val;}
と二度手間やらないといけないんでしょうか?

inout ref int foo(inout ref int val) {return val;}
だと取得はできるけど、代入すると左辺値として扱われなかった