Bug 3755 – Forward declaration templates something (D1 only)

Status
RESOLVED
Resolution
WONTFIX
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D1 (retired)
Platform
x86
OS
Windows
Creation time
2010-01-30T06:15:21Z
Last change time
2019-10-24T12:23:25Z
Keywords
rejects-valid
Assigned to
No Owner
Creator
borislav.asdf

Comments

Comment #0 by borislav.asdf — 2010-01-30T06:15:21Z
It used to work in 1.055 now it says bug.d(6): Error: declaration _D3bug1A6__initZ forward declaration bug.d(34): Error: template instance bug.Tuple!(_D3bug1A6__initZ) error instantiating bug.d(38): instantiated from here: InitsOf!(A) bug.d(54): instantiated from here: MinArgs!(func) ////////////////////////// ////////////////////////// ////////////////////////// struct A { } ////////////////////////// ////////////////////////// ////////////////////////// template ParameterTupleOf( Fn ) { static if( is( Fn Params == function ) ) alias Params ParameterTupleOf; else static if( is( Fn Params == delegate ) ) alias ParameterTupleOf!(Params) ParameterTupleOf; else static if( is( Fn Params == Params* ) ) alias ParameterTupleOf!(Params) ParameterTupleOf; else static assert( false, "Argument has no parameters." ); } template Tuple( TList... ) { alias TList Tuple; } template InitsOf(T...) { static if(T.length == 0) alias Tuple!() InitsOf; else alias Tuple!(T[0].init, InitsOf!(T[1 .. $])) InitsOf; } template MinArgs(alias func) { const uint MinArgs = MinArgsImpl!(func, 0, InitsOf!(ParameterTupleOf!(typeof(&func)))); } private template MinArgsImpl(alias func, int index, Args...) { static if(index >= Args.length) const uint MinArgsImpl = Args.length; else static if(is(typeof(func(Args[0 .. index])))) const uint MinArgsImpl = index; else const uint MinArgsImpl = MinArgsImpl!(func, index + 1, Args); } void func(A) { } void main() { const a = MinArgs!(func); }
Comment #1 by clugdbug — 2010-07-26T08:25:02Z
This is not a regression. The behaviour in 1.056 is the same as in 1.054. In 1.055, it didn't generate any error messages, but that was because the compiler was crashing! Interestingly the code works on 2.043 and later.
Comment #2 by razvan.nitu1305 — 2019-10-24T12:23:25Z
Closing as D1 is no longer supported.