digitalmars.D.learn - What about this...
- Aarti_pl (29/29) Jan 15 2008 Any comments on this? Probably error, but maybe someone wants to add
Any comments on this? Probably error, but maybe someone wants to add
something...
--------
void pattern(T)(T v) {}
T pattern(T)() {return T.init;}
void main() {
pattern!(int)(5);
}
---------
Above code results in compile time error:
quicktest.d(6): template instance pattern!(int) matches more than one
template declaration, pattern(T) and pattern(T)
quicktest.d(6): Error: template instance 'pattern!(int)' is not a variable
quicktest.d(6): Error: function expected before (), not pattern!(int) of
type int
---------
As you see it is standard D setter/getter approach with templates.
What's more interesting, when we call pattern template function with
IFTI it calls proper function:
pattern(5); //calls setter
but:
pattern; // is error
BTW: I hope that in DMD 2.0
writefln;
will be also allowed. Currently it doesn't work - you have to write
writefln();
BR
Marcin Kuszczak
(aarti_pl)
Jan 15 2008
Aarti_pl schrieb:
Any comments on this? Probably error, but maybe someone wants to add
something...
--------
void pattern(T)(T v) {}
T pattern(T)() {return T.init;}
void main() {
pattern!(int)(5);
}
---------
Above code results in compile time error:
quicktest.d(6): template instance pattern!(int) matches more than one
template declaration, pattern(T) and pattern(T)
quicktest.d(6): Error: template instance 'pattern!(int)' is not a variable
quicktest.d(6): Error: function expected before (), not pattern!(int) of
type int
---------
As you see it is standard D setter/getter approach with templates.
What's more interesting, when we call pattern template function with
IFTI it calls proper function:
pattern(5); //calls setter
but:
pattern; // is error
BTW: I hope that in DMD 2.0
writefln;
will be also allowed. Currently it doesn't work - you have to write
writefln();
BR
Marcin Kuszczak
(aarti_pl)
Sorry untested and just an idea :(
What happens when you use :
T pattern(T)(out T t) {return t;}
instead of
T pattern(T)() {return T.init;}
Bjoern
Jan 15 2008
Aarti_pl wrote:
Any comments on this? Probably error, but maybe someone wants to add
something...
--------
void pattern(T)(T v) {}
T pattern(T)() {return T.init;}
void main() {
pattern!(int)(5);
}
---------
There's a dirty, dirty but working work-around for this :)
T pattern(T)() { return T.init; }
void pattern(T, BOGUS=void)(T v) { }
then just use IFTI for the second one.
--downs
Jan 15 2008
downs pisze:Aarti_pl wrote:Thanks! Nice to know it! BR Marcin Kuszczak (aarti_pl)Any comments on this? Probably error, but maybe someone wants to add something... -------- void pattern(T)(T v) {} T pattern(T)() {return T.init;} void main() { pattern!(int)(5); } ---------There's a dirty, dirty but working work-around for this :) T pattern(T)() { return T.init; } void pattern(T, BOGUS=void)(T v) { } then just use IFTI for the second one. --downs
Jan 15 2008
Aarti_pl wrote:
Any comments on this? Probably error, but maybe someone wants to add
something...
--------
void pattern(T)(T v) {}
T pattern(T)() {return T.init;}
void main() {
pattern!(int)(5);
}
---------
Above code results in compile time error:
quicktest.d(6): template instance pattern!(int) matches more than one
template declaration, pattern(T) and pattern(T)
quicktest.d(6): Error: template instance 'pattern!(int)' is not a variable
quicktest.d(6): Error: function expected before (), not pattern!(int) of
type int
the issue is more noticeable in this form
template pattern(T) { void pattern(T v) {} }
template pattern(T) { T pattern() {return T.init;} }
void main() {
pattern!(int)(5);
}
DMD can't pick witch template to do. My thoughts on fixing this would be
to let this work:
template pattern(T)
{
void pattern(T v) {}
T pattern() {return T.init;}
}
Jan 15 2008









Bjoern <nanali nospam-wanadoo.fr> 