Thread overview
[Issue 3448] New: __traits(compiles) returns true for a non-compilable template instantiation
Oct 29, 2009
Max Samukha
Jun 12, 2011
yebblies
Jan 01, 2012
Denis
[Issue 3448] __traits(compiles) not in a function returns true for a non-compilable template instantiation
Jan 01, 2012
Denis
October 29, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3448

           Summary: __traits(compiles) returns true for a non-compilable
                    template instantiation
           Product: D
           Version: 2.035
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody@puremagic.com
        ReportedBy: samukha@voliacable.com


--- Comment #0 from Max Samukha <samukha@voliacable.com> 2009-10-29 04:48:13 PDT ---
template Bar()
{
    void Bar()
    {
        error;
    }
}

template Foo()
{
    enum Foo = __traits(compiles, Bar!());
}

static assert(!Foo!());

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
June 12, 2011
http://d.puremagic.com/issues/show_bug.cgi?id=3448


yebblies <yebblies@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |yebblies@gmail.com


--- Comment #1 from yebblies <yebblies@gmail.com> 2011-06-12 15:27:30 PDT ---
This seems to have the same root cause as bug 965

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
January 01, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=3448


Denis <verylonglogin.reg@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |verylonglogin.reg@gmail.com


--- Comment #2 from Denis <verylonglogin.reg@gmail.com> 2012-01-01 13:20:05 MSK ---
Just a bit smaller testcase:
---
void t()() { error; }

static assert(!__traits(compiles, t!()())); // assertion fails
static if(__traits(compiles, t!()())) { }   // Error: undefined identifier
---

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
January 01, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=3448


Denis <verylonglogin.reg@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|__traits(compiles) returns  |__traits(compiles) not in a
                   |true for a non-compilable   |function returns true for a
                   |template instantiation      |non-compilable template
                   |                            |instantiation


--- Comment #3 from Denis <verylonglogin.reg@gmail.com> 2012-01-01 13:35:40 MSK ---
This bug is only for `static assert/if` not in a function:
---
void t()() { error; }

void f() {
    static assert(!__traits(compiles, t!()())); // passes
    static if(__traits(compiles, t!()())) { }   // no errors
}
---

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------