Bug 8668 – public selective import makes functions conflict when otherwise they don't
Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2012-09-16T06:19:00Z
Last change time
2013-03-03T22:38:09Z
Keywords
pull, rejects-valid, TDPL
Assigned to
nobody
Creator
dmitry.olsh
Comments
Comment #0 by dmitry.olsh — 2012-09-16T06:19:29Z
Selective import is quite rotten. Continuing where I left with 8667 I've found another issue now with public selective import:
Again given a few simple modules:
module m;
void split(T)(T k)
if(is(T : string))
{
}
module m2;
void split(T)(T k)
if(is(T : int))
{
}
//drop in another one to pull split from m2
module m3;
public import m2: split;
//and the one to call them...
import m;
import m3; //replace with m2 to make it work
void main(){
split("abc");
split(123);
}
Compiling this all together yeilds an output that suggest that 2 templates are in conflict:
tryit.d(5): Error: m.split(T) if (is(T : string)) at m.d(3) conflicts with m3.sp
lit at m3.d(3)
tryit.d(6): Error: template m.split does not match any function template declara
tion
tryit.d(6): Error: template m.split(T) if (is(T : string)) cannot deduce templat
e function from argument types !()(int)
DMD 2.060 been there since at least 2.056.
*** Issue 8035 has been marked as a duplicate of this issue. ***
Comment #3 by k.hara.pg — 2013-01-08T18:31:41Z
From bug 8035:
----
import std.regex, std.string;
void main() {
split(s"hello", regex("[ \t,.;:?]+"));
}
----
This is a TDPL issue at p.18 (http://erdani.com/tdpl/errata/).
Comment #4 by github-bugzilla — 2013-03-03T22:05:43Z