Template constraint: T is a value type

Rikki Cattermole via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Oct 29 03:50:17 PDT 2014


On 29/10/2014 11:01 p.m., Gareth Foster wrote:
> Hi there,
>
> I'm looking to write a function template that operates only on value
> types. Basically I'm looking for an equivalent of
>
>    where T: struct
>
> from C# (http://msdn.microsoft.com/en-us/library/d5x73970.aspx)
>
> I was thinking that maybe using
>
>    template Foo(T) if (is(T : struct) or is(T: union)) { ... }
>
> or perhaps
>
>    template Foo(T) if (!is(T : class)) { ... }
>
> would be correct, but I fear the first may be too limiting (would simple
> data types such as int, char etc be allowed here? I'd guess not.) and
> the second may be too lax.
>
> Any advice? Am I even going in remotely the right direction? Thanks.

Code:
struct Foo {}
union Bar {}
class Fuz {}

pragma(msg, __traits(isPOD, Foo));
pragma(msg, __traits(isPOD, Bar));
pragma(msg, __traits(isPOD, Fuz));
pragma(msg, __traits(isPOD, int));

pragma(msg, is(Foo == struct));
pragma(msg, is(Bar == struct));
pragma(msg, is(Fuz == struct));
pragma(msg, is(int == struct));

pragma(msg, is(Foo == union));
pragma(msg, is(Bar == union));
pragma(msg, is(Fuz == union));
pragma(msg, is(int == union));

Output:
true
true
true
true
false
false
false
false
true
false
false

Dpaste link: http://dpaste.dzfl.pl/921fa5156290
So to answer your question, first was pretty much correct.


More information about the Digitalmars-d-learn mailing list