On Saturday, 28 June 2014 at 16:51:56 UTC, Sönke Ludwig wrote: > Am 28.06.2014 05:33, schrieb Peter Alexander: >> On Saturday, 28 June 2014 at 02:46:25 UTC, safety0ff wrote: >>> On Saturday, 28 June 2014 at 02:02:28 UTC, Peter Alexander >>>> int a; >>>> const int b; >>>> immutable int c; >>>> foo(a); >>>> foo(b); >>>> foo(c); >>>> >>>> These all call foo!int >>> >>> Awesome, thanks! >> >> ... I just tried this and I'm wrong. The qualifier isn't stripped. Gah! >> Three different versions! >> >> I could have sworn D did this for primitive types. This makes me sad :-( > > I *think* it does this if you define foo as "foo(T)(const(T) arg)", though. Thanks, that works. std.math doesn't do this for its templated functions, should it? Is there an easy way to shared-strip primitive types? Perhaps passing non-ref/non-pointer primitive data to const(T) should implicitly strip shared. Reading of the shared data occurs at the call site. Are there any use cases where passing on the shared-ness of a primitive type to non-ref const(T) is useful?