| // https://issues.dlang.org/show_bug.cgi?id=21997 |
| |
| struct Strukt |
| { |
| int i; |
| string s; |
| } |
| |
| int nonPureFunc(int i) |
| { |
| return 2 * i; |
| } |
| |
| int mainCtfe() |
| { |
| auto pureFunc = cast(int function(int) pure) &nonPureFunc; |
| assert(pureFunc(2) == 4); |
| |
| auto baseFunc = cast(int function(int)) pureFunc; |
| assert(baseFunc(3) == 6); |
| |
| /* |
| Still missing delegates: https://issues.dlang.org/show_bug.cgi?id=17487 |
| |
| static struct S { |
| int i; |
| int f(int j) { return i * j; } |
| } |
| |
| S s = S(5); |
| auto pureDel = cast(int delegate(int) pure) &s.f; |
| assert(pureDel(3) == 15); |
| |
| auto baseDel = cast(int delegate(int)) pureDel; |
| assert(baseDel(4) == 20); |
| */ |
| |
| { |
| shared Strukt shStr; |
| Strukt str = *cast(Strukt*) &shStr; |
| |
| shared(Strukt)* ptr = cast(shared(Strukt)*) &str; |
| } |
| |
| return 0; |
| } |
| |
| enum forceCTFE = mainCtfe(); |