How to test for equality of types?
Matthias Walter
xammy at xammy.homelinux.net
Sat May 19 03:23:10 PDT 2012
On 2012-05-19 09:05, Philippe Sigaud wrote:
> On Fri, May 18, 2012 at 11:51 PM, Simen Kjaeraas <simen.kjaras at gmail.com> wrote:
>
>> Because Wrapper!(AliasStruct).Wrap does not exist. And _error_ is not
>> equal to any other type.
>
> Yes. Wrap is included in the complete template name (Wrapper!(Wrap))
> and has no independent existence.
> You _can_ get access to it by exposing it as an alias, as you do in AliasStruct:
>
> struct Wrapper(Wrap)
> {
> alias Wrap Wrapped; // cannot call it 'Wrap'
> ...
>
> }
Yes, of course you are right. This was my fault - after exposing it via
an alias, it prints true.
> (third case)
>>> false
>>
>>
>> And here I disagree. This prints true on 2.059. Regression?
>
> AFAICT, this should print true.
>
> And, concerning Artur questio, on 2.059 (Linux):
>
> pragma(msg, is(w._wrap.Alias == AliasStruct.Alias));// -> true
> pragma(msg, typeof(w._wrap).Alias.stringof); // -> MyStruct
> pragma(msg, AliasStruct.Alias.stringof); // -> MyStruct
I would open a bug report with the following code which is a bit smaller
than my first wrong version:
=====================
module main;
struct MyStruct { }
struct AliasStruct
{
alias MyStruct Alias;
}
struct Wrapper
{
AliasStruct aliasStruct;
}
void main()
{
Wrapper w;
pragma(msg, typeof(w.aliasStruct).Alias.stringof); // -> "MyStruct"
pragma(msg, AliasStruct.Alias.stringof); // -> "MyStruct"
static assert(is(typeof(w.aliasStruct) == AliasStruct)); // -> true
static assert(is(typeof(w.aliasStruct).Alias == AliasStruct.Alias));
// -> false
}
=====================
Best regards,
Matthias
More information about the Digitalmars-d-learn
mailing list