digitalmars.D.bugs - [Issue 3189] New: `std.conv.to` : check for a custom `to` method in classes/structs
- d-bugmail puremagic.com (40/40) Jul 18 2009 http://d.puremagic.com/issues/show_bug.cgi?id=3189
- d-bugmail puremagic.com (8/8) Jul 19 2009 http://d.puremagic.com/issues/show_bug.cgi?id=3189
- d-bugmail puremagic.com (36/36) Aug 28 2009 http://d.puremagic.com/issues/show_bug.cgi?id=3189
http://d.puremagic.com/issues/show_bug.cgi?id=3189 Summary: `std.conv.to` : check for a custom `to` method in classes/structs Product: D Version: future Platform: All OS/Version: All Status: NEW Severity: enhancement Priority: P2 Component: Phobos AssignedTo: nobody puremagic.com ReportedBy: julien onandon.be Hello, it would be nice if `std.conv.to` on class or struct could check if this class or struct implements its own `to` method. Something as : module Date; class Date { T to(T)() if(is(T == long)) { return timestamp; } } module std.conv; T to(T, S)(S s) if (is(S : Object) { static if(is(typeof(s.to!(T)()))) return s.to!(T)(); return /* whatever */; } module test; void main() { assert(to!(long)(new Date) == 123124142324); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 18 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3189 Andrei Alexandrescu <andrei metalanguage.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 19 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3189 Andrei Alexandrescu <andrei metalanguage.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|ASSIGNED |RESOLVED Resolution| |FIXED 08:28:09 PDT --- Ok. I implemented this: /** Object-_to-non-object conversions look for a method "to" of the source object. Example: ---- class Date { T to(T)() if(is(T == long)) { return timestamp; } ... } unittest { auto d = new Date; auto ts = to!long(d); // same as d.to!long() } ---- */ T to(T, S)(S value) if (is(S : Object) && !is(T : Object) && !isSomeString!T && is(typeof(S.init.to!(T)()) : T)) { return value.to!T(); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 28 2009