Article on Tuples
Bill Baxter
wbaxter at gmail.com
Fri Nov 17 05:28:29 PST 2006
Oskar Linde wrote:
> Sean Kelly wrote:
>
>> Walter Bright wrote:
>>
>>> Sean Kelly wrote:
>>>
>>>> Ack! Related question :-) I assume this will work at some point?:
>>>>
>>>> T fn( T, U )( U val )
>>>> {
>>>> return T.init;
>>>> }
>>>>
>>>> void main()
>>>> {
>>>> int i = fn!(int)( 1.0 );
>>>> }
>>>>
>>>> Currently, I get:
>>>>
>>>> test.d(9): template instance fn!(int) does not match any template
>>>> declaration
>>>> test.d(9): Error: template instance 'fn!(int)' is not a variable
>>>> test.d(9): Error: function expected before (), not fn!(int) of
>>>> type int
>>>
>>>
>>> That's a hard one to get to work, as it has chicken-and-egg problems.
>>
>>
>> Hrm... I think that one may eventually turn out to be fairly
>> important. It's quite common to specify only the return type for
>> template functions in C++. The most obvious example being the cast
>> functions.
>
>
> You can use nested templates as a workaround:
>
> template myCast(T) {
> T myCast(U)(U val) {
> return cast(T) val;
> }
> }
>
> void main() {
> int i = myCast!(int)(1.0);
> }
Bummer, that doesn't seem to work inside a class member template:
class Foo {
template myCast(T) {
T myCast(U)(U val) {
return cast(T) val;
}
}
}
void main() {
Foo foo = new Foo;
int i = foo.myCast!(int)(1.0);
}
-->
Error: function expected before (), not 'foo dotexp template myCast(U)'
--bb
More information about the Digitalmars-d-announce
mailing list