blob: 120f8ffedca5555184cd4e5b8ee3d7e6f89b3c3a [file] [log] [blame]
module unique_typeinfo_names;
// https://issues.dlang.org/show_bug.cgi?id=22149
void structs()
{
static struct Foo(T) {}
auto foo()
{
struct S {}
return Foo!S();
}
auto bar()
{
struct S {}
return Foo!S();
}
auto f = foo();
auto b = bar();
assert(typeid(f) != typeid(b));
assert(typeid(f).name != typeid(b).name);
assert(typeid(f).mangledName == typeof(f).mangleof);
assert(typeid(b).mangledName == typeof(b).mangleof);
assert(typeid(f).name == "unique_typeinfo_names.structs().Foo!(unique_typeinfo_names.structs().foo().S).Foo");
assert(typeid(b).name == "unique_typeinfo_names.structs().Foo!(unique_typeinfo_names.structs().bar().S).Foo");
}
// https://issues.dlang.org/show_bug.cgi?id=22150
void classes()
{
static class Foo(T) {}
static auto foo()
{
struct S {}
return new Foo!S();
}
static auto bar()
{
struct S {}
return new Foo!S();
}
auto f = foo();
auto b = bar();
assert(typeid(f) != typeid(b));
assert(typeid(f).name != typeid(b).name);
assert(typeid(f).name == "unique_typeinfo_names.classes.Foo!(unique_typeinfo_names.classes.foo.S).Foo");
assert(typeid(b).name == "unique_typeinfo_names.classes.Foo!(unique_typeinfo_names.classes.bar.S).Foo");
}
void interfaces()
{
static interface IFoo(T) {}
static class Foo(T) : IFoo!T {}
static auto foo()
{
struct S {}
IFoo!S r = new Foo!S();
return r;
}
static auto bar()
{
struct S {}
IFoo!S r = new Foo!S();
return r;
}
auto f = foo();
auto b = bar();
assert(typeid(f) != typeid(b));
assert(typeid(f).name != typeid(b).name);
assert(typeid(f).name == "unique_typeinfo_names.interfaces.IFoo!(unique_typeinfo_names.interfaces.foo.S).IFoo");
assert(typeid(b).name == "unique_typeinfo_names.interfaces.IFoo!(unique_typeinfo_names.interfaces.bar.S).IFoo");
}
void main()
{
structs();
classes();
interfaces();
}