digitalmars.D - Can someone explain why this is not an error?
- Bernard Helyer (12/12) Jul 01 2010 http://www.digitalmars.com/d/2.0/declaration.html
- dolive (2/19) Jul 01 2010 immutable int a = 3, b = 4.2, c = true; // is error
- Bernard Helyer (2/3) Jul 01 2010 Uhhh, yes. Yes it is. ?_?
- FeepingCreature (2/19) Jul 01 2010 Type deduction is a special case. I think the above was written before w...
- bearophile (10/11) Jul 01 2010 OK. Special cases in a language are often bad, and I don't think that sy...
- Adam Ruppe (4/5) Jul 01 2010 Nitpicking myself, but I shouldn't have said that; auto is just the
- Adam Ruppe (15/15) Jul 01 2010 I don't think this is really a special case: they are all sharing the
- canalpay (32/32) Jul 01 2010 I think :
http://www.digitalmars.com/d/2.0/declaration.html "In a declaration declaring multiple symbols, all the declarations must be of the same type:" Yet this compiles: --- void main() { immutable a = 3, b = 4.2, c = true; } --- a, b, and c all have different types. Unless you consider the type as 'type to be inferred'. Can anyone explain this behaviour to me?
Jul 01 2010
Bernard Helyer дµ½:http://www.digitalmars.com/d/2.0/declaration.html "In a declaration declaring multiple symbols, all the declarations must be of the same type:" Yet this compiles: --- void main() { immutable a = 3, b = 4.2, c = true; } --- a, b, and c all have different types. Unless you consider the type as 'type to be inferred'. Can anyone explain this behaviour to me?immutable int a = 3, b = 4.2, c = true; // is error
Jul 01 2010
On Thu, 01 Jul 2010 06:26:34 -0400, dolive wrote:immutable int a = 3, b = 4.2, c = true; // is errorUhhh, yes. Yes it is. ?_?
Jul 01 2010
On 01.07.2010 11:49, Bernard Helyer wrote:http://www.digitalmars.com/d/2.0/declaration.html "In a declaration declaring multiple symbols, all the declarations must be of the same type:" Yet this compiles: --- void main() { immutable a = 3, b = 4.2, c = true; } --- a, b, and c all have different types. Unless you consider the type as 'type to be inferred'. Can anyone explain this behaviour to me?Type deduction is a special case. I think the above was written before we had it.
Jul 01 2010
FeepingCreature:Type deduction is a special case. I think the above was written before we had it.OK. Special cases in a language are often bad, and I don't think that syntax is significantly handy. So if you agree Bernard Helyer can put it in bugzilla, asking to remove this special case: void main() { immutable a1 = 3, b1 = "hello"; auto a2 = 3, b2 = "hello"; static a3 = 3, b3 = "hello"; const a4 = 3, b4 = "hello"; } Bye, bearophile
Jul 01 2010
On 7/1/10, Adam Ruppe <destructionator gmail.com> wrote:(and auto, which is inferred from the missing type).Nitpicking myself, but I shouldn't have said that; auto is just the default storage class, and it is the missing type that means infer it, not the auto keyword. I think you know what I mean though.
Jul 01 2010
I don't think this is really a special case: they are all sharing the same keywords. immutable a = 1, b = "a"; // both a and b are immutable string a = "a", b = "b"; // both a and b are strings immutable int a = 1, b = 2; // both a and b are immutable ints I'd say the bug is that the documentation uses the wrong word; it isn't "the same type" but rather that all must match the... stuff... on the left, so the comma separated list is identifiers and initializers, not types and storage classes (I don't know how to word it best, but it makes perfect sense.) What it forbids is C's habit of surprising you: int* a, b; // surprise, b is of type int! But, there's nothing really surprising in the immutable case. All variables are indeed immutable (and auto, which is inferred from the missing type).
Jul 01 2010
I think : Ýmmutable, type automatic moments. Because, it is StorageClass. Example : import std.stdio; void main() { immutable a = 3, b = 4.2, c = true; writeln(typeof(a).stringof,typeof(b).stringof,typeof(c).stringof); } or import std.stdio; void main() { auto a = 3, b = 4.2, c = true; writeln(typeof(a).stringof,typeof(b).stringof,typeof(c).stringof); } Keywords(StorageClass): abstract auto const deprecated extern final immutable shared nothrow override pure scope static synchronized I don't know English. I'm sorry if misspelled.
Jul 01 2010