[Issue 16347] New: Strange deprecation message when using templates

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Mon Aug 1 11:41:10 PDT 2016


https://issues.dlang.org/show_bug.cgi?id=16347

          Issue ID: 16347
           Summary: Strange deprecation message when using templates
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: dev at nomad.so

I'm not really sure what's going on here but here's a test snippet:


module test;

import std.traits;

public template DUnitMethodIterator(T, string generator, int index = 0)
{
    private string getResult()
    {
        string code = "";
        static if (index < __traits(allMembers, T).length)
        {
            // Comment out either the following static if to avoid the
deprecation message...
            static if (MemberFunctionsTuple!(T, __traits(allMembers,
T)[index]).length) { }

            // or the following template call to avoid the deprecation message.
            code ~= DUnitMethodIterator!(T, generator, index + 1);
        }
        return code;
    }
    enum DUnitMethodIterator = getResult();
}

private template MethodDelegateProperty(func...) { }

public mixin template Mockable(C)
{
    static public auto getMock(A...)(A args)
    {
        return new Mock!(C)(args);
    }

    private static class Mock(C)
    {
        mixin(DUnitMethodIterator!(C, "MethodDelegateProperty!(func)"));
    }
}

unittest
{
    static class T
    {
        mixin Mockable!T;
    }

    auto mock = T.getMock();
}


Building this code using the following command issues a deprecation message:

$ dmd -c -unittest test.d

/usr/include/dmd/phobos/std/traits.d(3677): Deprecation:
test.__unittestL40_1.T.Mockable!(T).Mock(C) if (is(C == class) || is(C ==
interface)) is not visible from module traits

Removing the commented lines of code (and rebuilding) removes the deprecation
message.

--


More information about the Digitalmars-d-bugs mailing list