On 10/30/11 5:16 AM, J Arrizza wrote:
        You should use either std.traits.isXxx systematically, or
        patterns systematically, but not both at the same time.
        Personally I prefer isXxx because they foster simple logic to
        decide what overloads should apply.


    Also, when posting, you may want to include complete short programs
    so others can try them quickly.


Andrei, I thought I had posted the entire program. Here it is again
using only traits as you recommend:

    import std.stdio;
    import std.traits;
    void abc(T) (T parm1)
       if (isNarrowString!T || (!isStaticArray!T && !isDynamicArray!T))
       {
       writeln("simpleparm: ", parm1);
       }
    void abc(T) (T parm1)
       if (!isNarrowString!T && (isDynamicArray!T || isStaticArray!T) )
       {
       writeln("array : ", parm1);
       }
    void main(string[] args)
       {
         writeln("v4");
         abc(1);
         abc("str");
         int[] arr = [1, 2];
         abc(arr);
         int[2] arr2 = [3, 4];
         abc(arr2);
       }

Thanks, sorry for having missed that.

The code as above is canonical. I think restricted templates are the way to go for most code. Pattern matching on types is rather arcane and should be let to a few advanced uses (such as implementing traits themselves).


Andrei

Reply via email to