Summary: is(typeof(...)) is reporting true when it's false due
                    to nested function error
           Product: D
           Version: unspecified
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: blocker
          Priority: P2
         Component: DMD

--- Comment #0 from Jonathan M Davis <> 2012-07-02 22:43:22 
PDT ---
This code fails to compile:

import std.algorithm;

private bool testEmptyInit(R)()
    static if(is(typeof({R range;})))
        R range;
        return range.empty;
        return false;

void main()
    testEmptyInit!(typeof(filter!"true"([0, 1, 2, 3])));

giving this error

h.d(7): Error: function std.algorithm.filter!("true").filter!(int[]).filter is
a nested function and cannot be accessed from

So, the compiler thinks that is(typeof({R range;})) is true for the type of
filter's result and then it gives an error saying that it's invalid to use it,
meaning that it's _not_ valid and therefore is(typeof({R range;})) should be

If bug# 5941 were fixed, this wouldn't be as big an issue (though the fact that
you can get an error for using a construct when the test for using it passes is
definitely a bug regardless), but as long as bug# 5941 exists, this is a major
blocker for being able to create a template to check for whether the init value
of a range type is empty or not.

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to