www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 11571] New: introduce "originalType" in std.conv

reply d-bugmail puremagic.com writes:
https://d.puremagic.com/issues/show_bug.cgi?id=11571

           Summary: introduce "originalType" in std.conv
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: Phobos
        AssignedTo: nobody puremagic.com
        ReportedBy: monarchdodra gmail.com



std.traits has "Unsigned"/"Signed" to operate on types, and their convenient
helpers in std.conv "unsigned"/"signed", to operate on values.

EG:
uint a;
b = a.signed;

I'd like to request the function "originalType", which would be std.traits'
"OriginalType", but that operates on values.

This would make it an easy and convenient way to strip the enum characteristic
information of an enumerate, and simply operate on the value represented by
said enum.

This would be useful, amongst others, in templates, to a), limit intanciations,
and b), to avoid operating on enums, which always tends to throw them off.
Also, it could be useful to print string enums, to "observe" the difference
between the enum *name* (printed by default), and the enum *value* (the string
carried by said enum).

For example:

enum LinkageType : string
{
    D = "D", ///
    C = "C", /// ditto
    Windows = "Windows", /// ditto
    Pascal = "Pascal", /// ditto
    Cpp = "C++" /// ditto
}

writeln(LinkageType.Cpp); //prints "Cpp"
writeln(LinkageType.Cpp.originalType); //prints "C++"

-- 
Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Nov 21 2013
next sibling parent d-bugmail puremagic.com writes:
https://d.puremagic.com/issues/show_bug.cgi?id=11571


Andrej Mitrovic <andrej.mitrovich gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |andrej.mitrovich gmail.com
         Resolution|                            |WORKSFORME



13:56:12 CEST ---
Already implemented in std.traits, named exactly OriginalType.

-- 
Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Mar 31 2014
prev sibling next sibling parent d-bugmail puremagic.com writes:
https://d.puremagic.com/issues/show_bug.cgi?id=11571


monarchdodra gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
         Resolution|WORKSFORME                  |




 Already implemented in std.traits, named exactly OriginalType.
Did you even *read* the issue?
 I'd like to request the function "originalType", which would be std.traits'
"OriginalType", but that operates on values. -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Mar 31 2014
prev sibling next sibling parent d-bugmail puremagic.com writes:
https://d.puremagic.com/issues/show_bug.cgi?id=11571




14:19:35 CEST ---

 I'd like to request the function "originalType", which would be std.traits'
"OriginalType", but that operates on values.
Missed that part. Although it's kind of very trivial for inclusion.. -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Mar 31 2014
prev sibling parent d-bugmail puremagic.com writes:
https://d.puremagic.com/issues/show_bug.cgi?id=11571






 I'd like to request the function "originalType", which would be std.traits'
"OriginalType", but that operates on values.
Missed that part. Although it's kind of very trivial for inclusion..
Yes, but it *does* trigger inference. EG: a.originalType; vs cast(OriginalType!(typeof(a))a; It's really no different from: - appender - representation - tuple - [un]signed - zip - ... All of these functions are trivial. But convenient. It also helps avoiding things like "if (is(T E == enum)) ..." altogether, if you can just paste ".originType" after it, and be done with it... ...Unless you have an enum type that's whose values are a subset of another enum (recursion)? I don't think a lot of code in phobos supports that :D -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Mar 31 2014