http://d.puremagic.com/issues/show_bug.cgi?id=8339

           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
        AssignedTo: nob...@puremagic.com
        ReportedBy: jmdavisp...@gmx.com


--- Comment #0 from Jonathan M Davis <jmdavisp...@gmx.com> 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;
    }
    else
        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
h.testEmptyInit!(FilteredRange).testEmptyInit

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
false.

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: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------

Reply via email to