[Issue 7542] New: inout parameter contravariant should be allowed
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Feb 19 03:31:39 PST 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7542
Summary: inout parameter contravariant should be allowed
Product: D
Version: D2
Platform: All
OS/Version: All
Status: NEW
Severity: enhancement
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: k.hara.pg at gmail.com
Depends on: 7105
--- Comment #0 from Kenji Hara <k.hara.pg at gmail.com> 2012-02-19 03:31:38 PST ---
After fixing issue 7105, we should allow inout parameter covariant.
Test cases:
----
void function(int* p) mfp;
void function(const(int)* p) cfp;
void function(immutable(int)* p) ifp;
void function(inout(int)* p) wfp;
wfp = mfp;
wfp = cfp;
wfp = ifp;
static assert(!__traits(compiles, wfp = function void(int**){}));
static assert(!__traits(compiles, wfp = function void(int[]){}));
void delegate(int* p) mdg;
void delegate(const(int)* p) cdg;
void delegate(immutable(int)* p) idg;
void delegate(inout(int)* p) wdg;
wdg = mdg;
wdg = cdg;
wdg = idg;
static assert(!__traits(compiles, wdg = delegate void(int**){}));
static assert(!__traits(compiles, wdg = delegate void(int[]){}));
void foo(T)(void delegate(inout(int)** p, inout(int)* v) dg)
{
T* pm;
T m;
dg(&pm, &m);
assert(pm == &m);
}
foo!( int)(( int ** p, int * v){ *p = v; });
foo!( const int)(( const(int)** p, const(int)* v){ *p = v; });
foo!(immutable int)((immutable(int)** p, immutable(int)* v){ *p = v; });
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list