On Saturday, April 27, 2013 20:14:10 Michael wrote:
> According to http://dlang.org/const3.html
> 
> >The simplest immutable declarations use it as a storage class.
> >It can be used to declare manifest constants.
> 
> So, immutable string s = "..."; should be a manifest constant.
> 
> If it is a constant that it can be used in switch(...).
> 
> switch(someStr)
> {
>     case s: ...; // Error: case must be a string or an integral
> constant, not s.
> },
> 
> but string s = "..."; works good.
> 
> Why?

Because an immutable string _isn't_ a manifest constant. Only enums are 
manifest constants.

immutable s = "foo";

or

immutable string s = "foo";

specifically create an immutable variable. It has an address and doesn't result 
in "foo" being copy-pasted everywhere that s is used like it would if s were 
an enum. It's no different from

string s = "foo";

or

auto s = "foo";

except that when is is immutable, it's implicitly shared, and you can't mutate 
it.

- Jonathna m Davis

Reply via email to