digitalmars.D.bugs - [Issue 415] New: conflicting template functions overloads
- d-bugmail puremagic.com (25/25) Oct 09 2006 http://d.puremagic.com/issues/show_bug.cgi?id=415
- d-bugmail puremagic.com (7/7) Oct 09 2006 http://d.puremagic.com/issues/show_bug.cgi?id=415
- d-bugmail puremagic.com (19/19) Oct 09 2006 http://d.puremagic.com/issues/show_bug.cgi?id=415
- d-bugmail puremagic.com (10/10) Oct 09 2006 http://d.puremagic.com/issues/show_bug.cgi?id=415
- d-bugmail puremagic.com (13/13) Oct 09 2006 http://d.puremagic.com/issues/show_bug.cgi?id=415
- d-bugmail puremagic.com (14/14) Oct 16 2006 http://d.puremagic.com/issues/show_bug.cgi?id=415
- d-bugmail puremagic.com (22/22) Nov 21 2006 http://d.puremagic.com/issues/show_bug.cgi?id=415
http://d.puremagic.com/issues/show_bug.cgi?id=415
Summary: conflicting template functions overloads
Product: D
Version: 0.169
Platform: PC
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: bugzilla digitalmars.com
ReportedBy: benoit tionex.de
void arraycopy( T )( T[] src, T[] trg, int length ){
}
void main(){
char[] a, b;
arraycopy( a, b, 1 ); //(1)
arraycopy( a, b, a.length ); //(2)
}
I don't want to change the main() content:
(2) causes an error because length is uint.
if I change the signature of arraycopy to "( T[], T[], uint)", (1) causes an
error.
If I supply both variations, they conflict. They should not.
--
Oct 09 2006
http://d.puremagic.com/issues/show_bug.cgi?id=415
davidl 126.com changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
--
Oct 09 2006
http://d.puremagic.com/issues/show_bug.cgi?id=415
davidl 126.com changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |golovanov_alexey mail.ru
void arraycopy( T,U )( T[] src, T[] trg, U length ){
static if (is(U: int)) //now uint ,int and other type can implicitly cast to
//int can be processed
{
// do ur job here
}
}
void main(){
char[] a, b;
arraycopy( a, b, 1 ); //(1)
arraycopy( a, b, a.length ); //(2)
}
--
Oct 09 2006
http://d.puremagic.com/issues/show_bug.cgi?id=415
davidl 126.com changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |REOPENED
Resolution|FIXED |
ah, u mean the problem is they should not conflict... umm yep , they shouldn't
conflict if they can't be implicitly cast to one type.
--
Oct 09 2006
http://d.puremagic.com/issues/show_bug.cgi?id=415
umm, i think i should state that more clear, i guess the problem is dmd not
doing enough distinguish check when the template in this collapsed form.
actually if i write
template arraycopy(T)
{
arraycopy(T[] a, T[] b, int length)
arraycopy(T[] a, T[] b, uint length)
}
is ok
but the main func in ur example need to modified, so that's not a good idea.
--
Oct 09 2006
http://d.puremagic.com/issues/show_bug.cgi?id=415
If I may, a more illustrative case:
--------
void func(int a) {
}
void tfunc()(int a) {
}
void test() {
func(cast(uint) 2); // OK
tfunc!()(cast(uint) 2); // OK
tfunc(cast(uint) 2); // IFTI breakage
}
--
Oct 16 2006
http://d.puremagic.com/issues/show_bug.cgi?id=415
bugzilla digitalmars.com changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|REOPENED |RESOLVED
Resolution| |INVALID
The language is working as defined. All the examples have easy solutions. Let's
take the last one:
void tfunc()(int a) {
}
void test() {
tfunc!()(cast(uint) 2); // OK
tfunc(cast(uint) 2); // IFTI breakage
}
Fix:
void tfunc(T)(T a) {
}
Or:
void tfunc()(int a) { }
void tfunc(dummy=void)(uint a) { }
--
Nov 21 2006









d-bugmail puremagic.com 