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.

Reply via email to