Thread overview
should this work?
Dec 29, 2006
BCS
Dec 29, 2006
Lars Ivar Igesund
Dec 29, 2006
BCS
December 29, 2006
void main()
{
  char[] str = "hello";
  int i = 5;
  switch(str)
  {
    case "hello":
    switch(i)
    {
      case "goodby":	// case for outer switch in inner switch
        writef("foo\n");
      case 1:;
        writef("bar\n");
    }
  }
}

It doesn't because (I assume), it isn't allowed to in C/C++. However that is because C has only one type for switches, integer. D doesn't have this restriction, array types are just fine. So why not (sanity aside*) permit it?

* I can think of no uses for it, but what does that matter.
December 29, 2006
"BCS" <nothing@pathlink.com> wrote in message news:en4131$29h2$1@digitaldaemon.com...
> It doesn't because (I assume), it isn't allowed to in C/C++. However that is because C has only one type for switches, integer. D doesn't have this restriction, array types are just fine. So why not (sanity aside*) permit it?

Ugh, thankfully it doesn't.  That's just plain confusing.


December 29, 2006
BCS wrote:

> void main()
> {
>    char[] str = "hello";
>    int i = 5;
>    switch(str)
>    {
>      case "hello":
>      switch(i)
>      {
>        case "goodby": // case for outer switch in inner switch
>          writef("foo\n");
>        case 1:;
>          writef("bar\n");
>      }
>    }
> }
> 
> It doesn't because (I assume), it isn't allowed to in C/C++. However that is because C has only one type for switches, integer. D doesn't have this restriction, array types are just fine. So why not (sanity aside*) permit it?
> 
> * I can think of no uses for it, but what does that matter.

I don't think this should be allowed. To actually enter the "goodby" case, str will have to be changed after case "hello" has been entered.

-- 
Lars Ivar Igesund
blog at http://larsivi.net
DSource & #D: larsivi
December 29, 2006
Lars Ivar Igesund wrote:
> BCS wrote:
> 
>> void main()
>> {
>>    char[] str = "hello";
>>    int i = 5;
>>    switch(str)
>>    {
>>      case "hello":
>>      switch(i)
>>      {
>>        case "goodby": // case for outer switch in inner switch
>>          writef("foo\n");
>>        case 1:;
>>          writef("bar\n");
>>      }
>>    }
>> }
>>
>> It doesn't because (I assume), it isn't allowed to in C/C++. However
>> that is because C has only one type for switches, integer. D doesn't
>> have this restriction, array types are just fine. So why not (sanity
>> aside*) permit it?
>>
>> * I can think of no uses for it, but what does that matter.
> 
> I don't think this should be allowed. To actually enter the "goodby" case,
> str will have to be changed after case "hello" has been entered.
> 

Well, assume that str could be "goodby". Say it (and i) comes from somewhere else. the result would be:

str	i	output
-----------------------
hello	1	"bar\n"
hello	!1	error: no default
goodby	any	"foo\nbar\n"

It's all moot because it doesn't work and, IMHO, goes along with the duff's device into the category of "things that you probably shouldn't do".

:b