http://d.puremagic.com/issues/show_bug.cgi?id=5204
Summary: Inherited out contract requires lvalue result? Product: D Version: D2 Platform: x86 OS/Version: Windows Status: NEW Severity: major Priority: P2 Component: DMD AssignedTo: nob...@puremagic.com ReportedBy: ah0801...@yahoo.com --- Comment #0 from Austin Hastings <ah0801...@yahoo.com> 2010-11-11 16:04:09 PST --- Using 2049, this code: ========== module scratch; interface collection( ValueT ) { alias collection!( ValueT ) collection_t; collection_t clear() out( result ) { assert( result.length == 0 ); } @property size_t length(); } interface mapping( KeyT, ValueT ) : collection!( ValueT ) { /* ... */ } class aamap( KeyT, ValueT ) : mapping!( KeyT, ValueT ) { alias aamap!( KeyT, ValueT ) aamap_t; aamap_t clear( ) { return this; } } void main() { alias aamap!( string, int ) aa_str2int; } ========== produces these diagnostics: ========== $ dmd -run scratch.d scratch.d(15): Error: cast(collection)__result is not an lvalue scratch.d(19): Error: template instance scratch.aamap!(string,int) error instantiating ========== As I understand it, I should be able to code a function like int foo() { return 1+1;} and have an out contract attached. So I don't understand why there is any consideration of the result ever being an lvalue. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------