On Thursday, 5 July 2018 at 10:32:01 UTC, Timoses wrote:
    int fun(T)(T i)
    {
        static assert(is(typeof(return) == T)); //true
        pragma(msg, is(T == return)); // false
        static if (is(T ReturnType == return))
            pragma(msg, ReturnType); // does not enter
        return i;
    }
    unittest
    {
        fun(3);
    }

What's the purpose of 'is(T == return)' if not the above?

Found it:
http://ddili.org/ders/d.en/is_expr.html
Section "is (T identifier == Specifier)"

    int fun() { return 1337; }
    template Temp(T)
    {
        //pragma(msg, typeof(T));
// is T a function, if so assign its return type to 'retType'
        static if (is(T retType == return))
        {
            retType Temp(T func)
            {
                return func();
            }
        }
    }
    void main()
    {
       int i = Temp!(typeof(&fun))(&fun);
       assert(i == 1337);
    }

So, 'return' checks if T is a callable and if so assigns its return type to 'identifier'.

Reply via email to