On 12/11/2011 11:19 PM, Jonathan M Davis wrote:
On Sunday, December 11, 2011 23:13:39 Timon Gehr wrote:
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.
They may be implicitly convertible, but if you just outright stripped const
and immutable from primitives, it would become impossible to instantiate a
container which held const or immutable elements which were primitive.
MyContainer!(immutable(int)).
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.
That may be, but depending on how the removal of const on primitives were
applied, it would happen. We need to make sure that it _doesn't_ happen.
My point was not that this is a horrible idea but rather that we need to make
sure that it targets what it's supposed to target and does not have side
effects that reduce D's current capabilities.
- Jonathan M Davis
The qualifiers are stripped from the actual arguments, not from the
template arguments.