digitalmars.D - enum, std.traits and "is(SomeEnumOfStruct == struct)" ?
- monarch_dodra (41/41) Sep 21 2013 I'm investigating a "inconsistent" behavior in std.traits
- monarch_dodra (3/8) Sep 25 2013 http://d.puremagic.com/issues/show_bug.cgi?id=11124
I'm investigating a "inconsistent" behavior in std.traits
regarding how the traits react when being passed an enum. To make
things simple, they don't react the way you'd expect.
Consider the simple types:
//----
struct User
{
char c;
alias c this;
}
enum E_char : char {a = char.init}
enum E_User : User {a = User.init}
//----
Question: Which of these are aggregates? which of these are some
char type?
Answer:
static assert(!isAggregateType!char); //Makes sense
static assert( isAggregateType!User); //Makes sense
static assert(!isAggregateType!E_char); //Makes sense
static assert(!isAggregateType!E_User); //[1] Makes no sense
static assert( isSomeChar!char); //Makes sense
static assert( !isSomeChar!User); //Makes sense
static assert( isSomeChar!E_char); //[2] Makes sense?
static assert( isSomeChar!E_User); //[3] Makes no sense
As you can see, I think behaviors [1] and [3] simply make no
sense. "[2]" is arguably up to debate.
In any case, I was wondering what the root issue was: Is it the
implementation of std.trait or does it come from this behavior
for "is", when enums are involved:
static assert ( is(User == struct));
static assert ( is(E_char == enum));
static assert ( is(E_User == enum));
static assert (!is(E_char == struct));
static assert (!is(E_User == struct)); //[HERE]
Question 1: Does the scenario [HERE] make sense? Is this correct
behavior?
Question 2: Would the syntax: "is (T : struct)" or "is (T :
enum)" make sense? It would work around the "problem" elegantly,
as well as also provide support for asking things such as "does
this class have an alias this to a struct", or "does this struct
have an alias this to an enum"?
Sep 21 2013
On Saturday, 21 September 2013 at 16:08:23 UTC, monarch_dodra wrote:Question 2: Would the syntax: "is (T : struct)" or "is (T : enum)" make sense? It would work around the "problem" elegantly, as well as also provide support for asking things such as "does this class have an alias this to a struct", or "does this struct have an alias this to an enum"?http://d.puremagic.com/issues/show_bug.cgi?id=11124
Sep 25 2013








"monarch_dodra" <monarchdodra gmail.com>