D2: how to cast away const/invariant in template?

Max Samukha samukha at voliacable.com.removethis
Mon Sep 29 23:51:57 PDT 2008


On Tue, 30 Sep 2008 09:49:26 +0300, Max Samukha
<samukha at voliacable.com.removethis> wrote:

>On Mon, 29 Sep 2008 19:38:42 +0000 (UTC), Brian Price
><blprice61 at yahoo.com> wrote:
>
>>Using D2: given a template with parameter T, how do you strip away
>>const/invariant from the type T in an overload without creating a separate
>>overload for each and every possible type?
>>
>>What I'm looking for is something like:
>>
>>T strip( T )( T arg )
>>{
>>    return arg;
>>}
>>
>>T strip( T: const T )( const T arg )
>>{
>>    return cast(T) arg;
>>}
>>
>>T strip( T: invariant T )( invariant T arg )
>>{
>>    return cast(T) arg;
>>}
>>
>>The above doesn't work but should be enough to show what I'm asking.
>>Thanks,
>>Brian
>

>auto strip(T)(T args)
>{
>    static if (is(T U == const(U)) || is(T U == invariant(U)))
>        return cast(U) args;
>    else
>        return args;
>}
args was meant to be arg


More information about the Digitalmars-d-learn mailing list