www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 12532] New: __traits(compiles, ...) fails to see valid enum symbols

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

           Summary: __traits(compiles, ...)  fails to see valid enum
                    symbols
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: 2krnk gmx.net


--- Comment #0 from det <2krnk gmx.net> 2014-04-06 16:23:40 PDT ---
under certain circumstances, eg when called from a template using mixin and
static if, __traits(compiles, ...)  fails to see valid enum symbols. (if 'enum'
in following example is replaced by 'const bool' or 'immutable bool' all
symbols are found.)

=== EXAMPLE ===

template valid(string mem){
    pragma(msg, "instantiation of 'valid' with: "~mem);
    static if( !__traits( compiles, mixin(mem) ) ){
        enum valid = false;
    }else{
        enum valid =  true;
     }
}

enum ok = valid!"works";
pragma(msg, "found 'works'? "~ok.stringof );
// true - fine, recognizes 'works' later in module scope

enum foo = valid!"bar";
pragma(msg, "found 'bar'? "~foo.stringof );
// true - fine, recognizes 'bar' laterin module scope

enum bar = valid!"foo";
pragma(msg, "found 'foo'? "~bar.stringof );
// false - fails to see 'foo' earlier in module scope!

enum works = true;

void main(){}

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


monarchdodra gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |monarchdodra gmail.com


--- Comment #1 from monarchdodra gmail.com 2014-04-06 23:09:32 PDT ---
Reduced:

//----
enum a = is(typeof(b));
enum b = is(typeof(a));

pragma(msg, a); //true
pragma(msg, b); //false
//----

I'm not sure this is actually resolvable...?

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



--- Comment #2 from det <2krnk gmx.net> 2014-04-07 07:20:53 PDT ---
(In reply to comment #1)
 Reduced:
 
 //----
 enum a = is(typeof(b));
 enum b = is(typeof(a));
 
 pragma(msg, a); //true
 pragma(msg, b); //false
 //----
 
 I'm not sure this is actually resolvable...?

sorry, i should have reduced it to enum a = __traits(compiles, b); pragma(msg, a); // true enum b = __traits(compiles, a); pragma(msg, b); // false guess i was too preoccupied with issue 12533. however, i think b should be true, __traits(compiles, ...) should not need the value or type of a. in other words, it should be able to see that a symbol is defined without caring what it actually is. as a matter of fact, in enum c; pragma(msg, typeof(c)); // _error_ pragma(msg, is(typeof(c)) ); // false enum d = __traits(compiles, c); pragma(msg, d); // true this is kinda happening. -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 07 2014