| /* |
| RUN_OUTPUT: |
| --- |
| Success |
| --- |
| */ |
| import core.stdc.stdio : printf; |
| |
| //------------------------------------------------------------------------------ |
| |
| T enforce7452(T, string file = __FILE__, size_t line = __LINE__) |
| (T value, lazy const(char)[] msg = null) @safe pure |
| { |
| if (!value) |
| throw new Exception(msg ? msg.idup : "Enforcement failed", file, line); |
| return value; |
| } |
| |
| int f7452()(int x) |
| { |
| enforce7452(x > 0); |
| return x; |
| } |
| void g7452() @safe pure |
| { |
| assert(4 == f7452(4)); |
| } |
| |
| //------------------------------------------------------------------------------ |
| |
| void e7452b(int, lazy int) pure nothrow @safe {} |
| int f7452b()(int x) |
| { |
| e7452b(x, 0); |
| return x; |
| } |
| void g7452b() pure nothrow @safe |
| { |
| assert(4 == f7452b(4)); |
| } |
| |
| //------------------------------------------------------------------------------ |
| |
| int f7452c()(int x) |
| { |
| auto y = function int() { return 0; }; |
| return x; |
| } |
| void g7452c() pure nothrow @safe |
| { |
| assert(4 == f7452c(4)); |
| } |
| |
| //------------------------------------------------------------------------------ |
| |
| auto f6332a()() { return 1; } |
| int f6332b()() { return 1; } |
| |
| alias f6332a!() F6332a; |
| |
| void g6332() pure nothrow @safe |
| { |
| auto x = f6332b(); |
| auto y = f6332a(); |
| assert(x == y); |
| } |
| |
| //------------------------------------------------------------------------------ |
| |
| int main() |
| { |
| g7452(); |
| g7452b(); |
| g7452c(); |
| g6332(); |
| |
| printf("Success\n"); |
| return 0; |
| } |