| Thread overview | ||||||
|---|---|---|---|---|---|---|
|
December 03, 2014 template bug? | ||||
|---|---|---|---|---|
| ||||
Hi,
Is this a bug in the compiler?
import std.stdio;
import std.typetuple;
class A {
int foo() {
return 0;
}
}
class B : A {
alias A.foo foo;
override int foo() {
return 1;
}
}
template ItemProperty(item, string method) {
static if(__traits(hasMember, item, method)) {
static if(__traits(getProtection, ItemProperty!(item, method)).stringof[1..$-1] == "public") {
alias ItemProperty = TypeTuple!(ItemProperty!(item, method));
} else {
alias ItemProperty = TypeTuple!();
}
} else {
alias ItemProperty = TypeTuple!();
}
}
void test()() {
static if(ItemProperty!(B, "foo").length > 1) {
writeln("found");
} else {
writeln("not found");
}
}
void main()
{
test;
}
| ||||
December 03, 2014 Re: template bug? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to gedaiu | On 12/03/2014 09:10 AM, gedaiu wrote: > Hi, > > Is this a bug in the compiler? Attempting to compile with a recent dmd git head causes segmentation fault. Any compiler crash is a compiler bug. Please report it at https://issues.dlang.org/ Ali | |||
December 03, 2014 Re: template bug? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | Ali Çehreli:
> Attempting to compile with a recent dmd git head causes segmentation fault. Any compiler crash is a compiler bug. Please report it at
>
> https://issues.dlang.org/
>
> Ali
A first reduction for Bugzilla:
alias TypeTuple(T...) = T;
struct A {
void foo() {}
}
template ItemProperty(item, string method) {
static if(__traits(getProtection, ItemProperty!(item, method)).stringof)
alias ItemProperty = TypeTuple!(ItemProperty!(item, method));
}
void main() {
auto l = ItemProperty!(A, "foo").length;
}
Bye,
bearophile
| |||
December 04, 2014 Re: template bug? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to bearophile | On Wednesday, 3 December 2014 at 18:25:41 UTC, bearophile wrote:
> Ali Çehreli:
>
>> Attempting to compile with a recent dmd git head causes segmentation fault. Any compiler crash is a compiler bug. Please report it at
>>
>> https://issues.dlang.org/
>>
>> Ali
>
> A first reduction for Bugzilla:
>
>
> alias TypeTuple(T...) = T;
> struct A {
> void foo() {}
> }
> template ItemProperty(item, string method) {
> static if(__traits(getProtection, ItemProperty!(item, method)).stringof)
> alias ItemProperty = TypeTuple!(ItemProperty!(item, method));
> }
> void main() {
> auto l = ItemProperty!(A, "foo").length;
> }
>
>
> Bye,
> bearophile
Thanks for the code revised version. I thought that the compiler crashes because I was trying to get the access of an overrided method.
Bogdan
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply