On 12/11/2011 10:34 PM, Jonathan M Davis wrote:
On Sunday, December 11, 2011 10:34:40 Andrei Alexandrescu wrote:
On 12/11/11 9:46 AM, dsimcha wrote:
On 12/10/2011 4:47 PM, Andrei Alexandrescu wrote:
We decided to fix this issue by automatically shedding the top-level
const when passing an array or a pointer by value into a function.

Really silly question: Why not do the same for primitives (int, float,
char, etc.) or even structs without indirection? I've seen plenty of
code that blows up when passed an immutable double because it tries to
mutate its arguments. About 1.5 years ago I fixed a bug like this in
std.math.pow().

Yes, that would be good to do as well.

Actually, that could be a problem for some stuff. It might be an acceptable
problem, but it creates a problem nonetheless. What about containers? You can
have arrays with immutable elements, but if you made it so that immutable int
and int were the same as far as templates were concerned,  then it would be
impossible to have a container which held immutable elements. How big of a
problem that is, I don't know, but I'd be concerned about some of the side
effects.

Those issues are inexistent. int and immutable(int) are implicitly convertible to each other.


Another concern would be what would happen with primitives when they're inside
of arrays. e.g.

void func(T)(T[] arr)

Having T lose its constness would be a big problem here.

Nobody suggested to do that.

Reply via email to