digitalmars.D.bugs - [Issue 5158] New: Allow operator overloading on non-type template instances
- d-bugmail puremagic.com (45/45) Nov 03 2010 http://d.puremagic.com/issues/show_bug.cgi?id=5158
- d-bugmail puremagic.com (28/28) Dec 18 2012 http://d.puremagic.com/issues/show_bug.cgi?id=5158
http://d.puremagic.com/issues/show_bug.cgi?id=5158 Summary: Allow operator overloading on non-type template instances Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: enhancement Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: simen.kjaras gmail.com PDT --- template foo( alias A ) { void opAssign( typeof( A ) arg ) { A = arg; } } int a; foo!a = 4; The above currently does not work. Allowing this to compile and run would enable the creation of throwaway types that do nothing but simple operator overloading, allowing for e.g. reference tuple elements: import std.typecons; import std.typetuple; import dranges.templates; import dranges.typetuple; template _( T... ) if ( allSatisfy!( isAlias, T ) ) { Tuple!( StaticMap!( TypeOf, T ) ) opAssign( Tuple!( StaticMap!( TypeOf, T ) ) args ) { foreach ( i, e; T ) { e = args[i]; } return args; } } unittest { int a = 1; b = 1; _!( a, b ) = tuple( b, a+b ); // Equivalent to _!( a, b ).opAssign( b, a+b ); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 03 2010
http://d.puremagic.com/issues/show_bug.cgi?id=5158 Andrej Mitrovic <andrej.mitrovich gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |andrej.mitrovich gmail.com 12:51:08 PST --- This works: template foo( alias A ) { struct Foo { void opAssign( typeof( A ) arg ) { A = arg; } } enum foo = Foo(); } void main() { int a; foo!a = 4; } Note that changing 'enum foo' to 'auto foo' creates a segfault at runtime, which might be an interesting unrelated bug. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Dec 18 2012