www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 2499] New: Template alias default value cannot be template instantiation

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2499

           Summary: Template alias default value cannot be template
                    instantiation
           Product: D
           Version: 2.019
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Keywords: rejects-valid
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla digitalmars.com
        ReportedBy: schveiguy yahoo.com


Simple case:

void foo(T)()
{
}

struct f(alias func=foo!(int))
{
}

void main()
{
  f!() myf;
}

Error in 1.036:
Error: foo!(int) is not a symbol

Error in 2.019:
testtemplatealias.d(5): Error: foo!(int) is used as a type
testtemplatealias.d(11): template instance f!() does not match template
declaration f(alias func = foo!(int))
testtemplatealias.d(11): Error: f!() is used as a type
testtemplatealias.d(11): variable testtemplatealias.main.myf voids have no
value


Workaround is to alias the default parameter before using as the default
parameter:

alias foo!(int) defaultFoo;

struct f(alias func=defaultFoo)
{
}


-- 
Dec 08 2008
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2499






Note that in the case where you want the default value to depend on other
template parameters, such as:

struct f(T, alias func=foo!(T))

This is much tricker.  I found that the cleanest way to workaround is to avoid
default parameters, and just alias the less specific ones:

struct f(T, alias func)
{
}

template f(T)
{
  alias f!(T, foo!(T)) f;
}


-- 
Dec 08 2008
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2499


bugzilla digitalmars.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED





Fixed dmd 1.038 amd 2.022


-- 
Dec 25 2008