www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Forward reference to enum nested in a class

reply HOSOKAWA Kenchi <hskwk inter7.jp> writes:
Dear Everyone,

I have problem on reference to enum nested in a class from template difinition.


class Foo
{
	enum FooEnum {}
}
enum GlobalEnum {}

class BarA(Foo.FooEnum T) {} // Error, Foo.FooEnum is forward referenced
class BarB(T : GlobalEnum){} // OK
class BarC
{
	FooEnum t; // OK
}


I want to specialize class template BarA in each conditions listed in
Foo.FooEnum closely related with class Foo.
This trial, however, failed because of forward reference to Foo.FooEnum from
BarA.
I have avoided this problem in this way:


enum FooEnum {}
class Foo
{
	alias .FooEnum FooEnum;
}
class BarD(Image.FooEnum T) {}


Please let me know the way to resolve this probrem.
I have no idea whether this problem should be avoided by such way or another.



Sincerely,
Nov 03 2007
parent reply "Jarrett Billingsley" <kb3ctd2 yahoo.com> writes:
"HOSOKAWA Kenchi" <hskwk inter7.jp> wrote in message 
news:fghd88$2eql$1 digitalmars.com...
 Dear Everyone,

 I have problem on reference to enum nested in a class from template 
 difinition.


 class Foo
 {
 enum FooEnum {}
 }
 enum GlobalEnum {}

 class BarA(Foo.FooEnum T) {} // Error, Foo.FooEnum is forward referenced
 class BarB(T : GlobalEnum){} // OK
 class BarC
 {
 FooEnum t; // OK
 }


 I want to specialize class template BarA in each conditions listed in 
 Foo.FooEnum closely related with class Foo.
 This trial, however, failed because of forward reference to Foo.FooEnum 
 from BarA.
 I have avoided this problem in this way:


 enum FooEnum {}
 class Foo
 {
 alias .FooEnum FooEnum;
 }
 class BarD(Image.FooEnum T) {}


 Please let me know the way to resolve this probrem.
 I have no idea whether this problem should be avoided by such way or 
 another.

It's a bug that's been in the language as long as I can remember. Walter deems it "too difficult to fix with too little reward." BS, I say.
Nov 04 2007
parent HOSOKAWA Kenchi <hskwk inter7.jp> writes:
Jarrett Billingsley Wrote:

 "HOSOKAWA Kenchi" <hskwk inter7.jp> wrote in message 
 news:fghd88$2eql$1 digitalmars.com...
 Dear Everyone,

 I have problem on reference to enum nested in a class from template 
 difinition.


 class Foo
 {
 enum FooEnum {}
 }
 enum GlobalEnum {}

 class BarA(Foo.FooEnum T) {} // Error, Foo.FooEnum is forward referenced
 class BarB(T : GlobalEnum){} // OK
 class BarC
 {
 FooEnum t; // OK
 }


 I want to specialize class template BarA in each conditions listed in 
 Foo.FooEnum closely related with class Foo.
 This trial, however, failed because of forward reference to Foo.FooEnum 
 from BarA.
 I have avoided this problem in this way:


 enum FooEnum {}
 class Foo
 {
 alias .FooEnum FooEnum;
 }
 class BarD(Image.FooEnum T) {}


 Please let me know the way to resolve this probrem.
 I have no idea whether this problem should be avoided by such way or 
 another.

It's a bug that's been in the language as long as I can remember. Walter deems it "too difficult to fix with too little reward." BS, I say.

Thank you very much for the information. Fortunately I have a alternative solution written above, so I won't care of this problem. again, thanks.
Nov 06 2007