Bug 7657 – ReturnType fails for simple templated functions
Status
RESOLVED
Resolution
WONTFIX
Severity
enhancement
Priority
P2
Component
phobos
Product
D
Version
D2
Platform
All
OS
All
Creation time
2012-03-06T17:51:00Z
Last change time
2012-04-19T19:13:53Z
Assigned to
nobody
Creator
andrej.mitrovich
Comments
Comment #0 by andrej.mitrovich — 2012-03-06T17:51:58Z
import std.algorithm;
import std.traits;
void main()
{
alias ReturnType!countUntil Type; // fails
}
Here's the thing: countUntil has a defined return type and it doesn't change based on its template arguments. So I think the above should work.
I'm doing some metaprogramming and I need to get the return type of a function so I can wrap it. I can't simply use 'auto' because I'm also wrapping the return type, e.g.:
template Magic(alias func)
{
Wrapped!(ReturnType!func) Magic(T...)(T t)
{
// ..
}
}
I think ReturnType could be made to work even though it's a non-instantiated template (I'm not sure how but maybe there's a way).
Comment #1 by issues.dlang — 2012-03-06T17:58:09Z
Except that if a template hasn't been initialized, it doesn't even really _exist_ as far as the compiler is concerned. It's a template for something, not an actual function or type.
So, while I can see why you'd want this, I just don't see how it could be done with how templates are implemented.
Comment #2 by andrej.mitrovich — 2012-04-19T19:13:53Z
(In reply to comment #1)
> Except that if a template hasn't been initialized, it doesn't even really
> _exist_ as far as the compiler is concerned. It's a template for something, not
> an actual function or type.
>
> So, while I can see why you'd want this, I just don't see how it could be done
> with how templates are implemented.
Yes, and come to think of it it would be dangerous to allow this feature. If at a later time a template had its return type changed to 'auto' it would break existing code that relied on ReturnType working on such a template.