Thread overview
enum detection
Nov 22, 2012
Jack Applegame
Nov 22, 2012
Andrej Mitrovic
Nov 22, 2012
bearophile
Nov 22, 2012
bearophile
Nov 22, 2012
Kenji Hara
Nov 23, 2012
Jack Applegame
Nov 23, 2012
Jack Applegame
November 22, 2012
How to detect enum member?

struct A {
  enum id = 10;
  int b;
  char c;
}
foreach(ident; __traits(allMembers, A)) {
  // is ident enum or not?
}

November 22, 2012
On 11/22/12, Jack Applegame <japplegame@gmail.com> wrote:
> How to detect enum member?
>
> struct A {
>    enum id = 10;
>    int b;
>    char c;
> }
> foreach(ident; __traits(allMembers, A)) {
>    // is ident enum or not?
> }

That's not an enum, that's a manifest constant. This is an enum:
struct A {
enum id { x = 10 }
}

You can use:

struct A
{
    enum id = 10;
    int b;
    char c;
}

template isEnum(alias symb)
{
    static if (is(symb == enum))
        enum bool isEnum = true;
    else
        enum bool isEnum = false;
}

void main()
{
    foreach(ident; __traits(allMembers, A))
    {
        static if (isEnum!(__traits(getMember, A, ident)))
        {
            pragma(msg, ident, " yes");
        }
    }
}
November 22, 2012
Jack Applegame:

> How to detect enum member?
>
> struct A {
>   enum id = 10;
>   int b;
>   char c;
> }
> foreach(ident; __traits(allMembers, A)) {
>   // is ident enum or not?
> }

Have you tried is(ident == enum) ?

Bye,
bearophile
November 22, 2012
On Thursday, 22 November 2012 at 15:10:08 UTC, Jack Applegame wrote:
> How to detect enum member?
>
> struct A {
>   enum id = 10;
>   int b;
>   char c;
> }
> foreach(ident; __traits(allMembers, A)) {
>   // is ident enum or not?
> }

Actual field might have `offsetof` builtin property.

(not tested)
  static if (is(typeof(mixin("A."~ident~".offsetof")))) {}

Kenji Hara
November 22, 2012
> Have you tried is(ident == enum) ?

Sorry, ignore this answer, I was too much distracted.

Bye,
bearophile
November 23, 2012
On Thursday, 22 November 2012 at 17:36:03 UTC, Kenji Hara wrote:
> Actual field might have `offsetof` builtin property.
>
> (not tested)
>   static if (is(typeof(mixin("A."~ident~".offsetof")))) {}

Yes, it works! Thanks.

November 23, 2012
On Thursday, 22 November 2012 at 17:36:03 UTC, Kenji Hara wrote:
> Actual field might have `offsetof` builtin property.
>
> (not tested)
>   static if (is(typeof(mixin("A."~ident~".offsetof")))) {}

Yes, it works! Thanks.