Deducing types for function templates

Magnus Lie Hetland magnus at hetland.org
Mon Mar 21 10:23:39 PDT 2011


On 2011-03-15 21:13:36 +0100, Michel Fortin said:

>> Oh, it's much older than that:
>> 
>> http://d.puremagic.com/issues/show_bug.cgi?id=2128
> 
> I'm not sure it's the same thing, but I realize it's hard to say given 
> Magnus in his original post didn't mention how he attempts to 
> instantiate the template.

Hm. I've gone back to it now, and, sadly (as opposed to for the other 
bugs I've encountered :) I didn't isolate and save the related code -- 
so now I'm unable to reproduce the const problem. (Who knows ... maybe 
I was just trying to pass it on as an un-const parameter or something? 
Might very well have been a bug on my part.)

Here's some sample code for the other part of my question, though 
(which might not have been as unclear in the first place?).

class Foo(T) {
    T foo;
}

template baz_t(T) {
    alias real function(T, T) baz_t;
}

Foo!T foo(T)(T[] bar, baz_t!T baz) {
    return new Foo!T;
}

real frozz(uint x, uint y) {
    return 4.2;
}

void main() {
    uint[] x = [1, 2, 3];
    auto f = foo(x, &frozz);
}

The error is:

inferencebug.d(19): Error: template inferencebug.foo(T) does not match 
any function template declaration
inferencebug.d(19): Error: template inferencebug.foo(T) cannot deduce 
template function from argument types !()(uint[],real function(uint x, 
uint y))

-- 
Magnus Lie Hetland
http://hetland.org



More information about the Digitalmars-d-learn mailing list