== Quote from Russell Lewis ([email protected])'s article > I have a set of templates which take alias parameters, and I want to > specialize them based on the type of the aliased symbols. > So I looked at > http://digitalmars.com/d/2.0/template.html#TemplateAliasParameter and > saw the following grammar (but no matching example): > TemplateAliasParameter: > alias Identifier > alias Identifier TemplateAliasParameterSpecialization > alias Identifier TemplateAliasParameterDefault > alias Identifier TemplateAliasParameterSpecialization > TemplateAliasParameterDefault > TemplateAliasParameterSpecialization: > : Type > TemplateAliasParameterDefault: > = Type > So I wrote this code, which DMD rejects: > template foo(alias A : int) {} > How is this supposed to work? Or, is this a DMD bug? > Russ
I was working through the grammar and found this too. The document at: http://www.digitalmars.com/d/1.0/template.html#TemplateAliasParameter http://www.digitalmars.com/d/2.0/template.html#TemplateAliasParameter says: Template Alias Parameters TemplateAliasParameter: alias Identifier TemplateAliasParameterSpecializationopt TemplateAliasParameterDefaultopt TemplateAliasParameterSpecialization: : Type <---- ??? TemplateAliasParameterDefault: = Type <---- ??? What DOES work is this: //======================================= int defaultSymbol; int someParticularSymbol; //generic version for any someThing defaulting to defaultSymbol; class myAliasTemplate( alias someThing = defaultSymbol ) { //the generic (non-specialised case) } //specialised version for only someParticularSymbol; class myAliasTemplate( alias someThing: someParticularSymbol) { //the specialised case) } //======================================= Another approach: //======================================= class myAliasTemplate( alias someThing = defaultSymbol ) { static if( is(typeof(someThing)==int) ) { //Define contents for int (specialised) } else { //Define contents otherwise (generic) } } //======================================= I'm using DMD v1.036 on linux. Paul Thompson (p dot thompson at acfr dot usyd dot edu dot au )
