1 import core.stdc.stdio : printf;
2 
3 //------------------------------------------------------------------------------
4 
5 T enforce7452(T, string file = __FILE__, size_t line = __LINE__)
6     (T value, lazy const(char)[] msg = null) @safe pure
7 {
8     if (!value)
9         throw new Exception(msg ? msg.idup : "Enforcement failed", file, line);
10     return value;
11 }
12 
f7452()13 int f7452()(int x)
14 {
15    enforce7452(x > 0);
16    return x;
17 }
g7452()18 void g7452() @safe pure
19 {
20    assert(4 == f7452(4));
21 }
22 
23 //------------------------------------------------------------------------------
24 
e7452b(int,lazy int)25 void e7452b(int, lazy int) pure nothrow @safe {}
f7452b()26 int f7452b()(int x)
27 {
28    e7452b(x, 0);
29    return x;
30 }
g7452b()31 void g7452b() pure nothrow @safe
32 {
33    assert(4 == f7452b(4));
34 }
35 
36 //------------------------------------------------------------------------------
37 
f7452c()38 int f7452c()(int x)
39 {
40    auto y = function int() { return 0; };
41    return x;
42 }
g7452c()43 void g7452c() pure nothrow @safe
44 {
45    assert(4 == f7452c(4));
46 }
47 
48 //------------------------------------------------------------------------------
49 
f6332a()50 auto f6332a()() { return 1; }
f6332b()51 int f6332b()() { return 1; }
52 
53 alias f6332a!() F6332a;
54 
g6332()55 void g6332() pure nothrow @safe
56 {
57     auto x = f6332b();
58     auto y = f6332a();
59     assert(x == y);
60 }
61 
62 //------------------------------------------------------------------------------
63 
main()64 int main()
65 {
66     g7452();
67     g7452b();
68     g7452c();
69     g6332();
70 
71     printf("Success\n");
72     return 0;
73 }
74 
75 
76