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
