mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 05:00:16 +03:00
39 lines
1 KiB
D
39 lines
1 KiB
D
/**
|
|
TEST_OUTPUT:
|
|
---
|
|
Call 0
|
|
(x: true, y: false)
|
|
Call 1
|
|
Call 2
|
|
(x: false, y: false)
|
|
Call 3
|
|
(x: false, y: true)
|
|
Call 4
|
|
---
|
|
|
|
As of writing this test, template function instances store the function arguments from the call site.
|
|
When looking in cache for an existing template instantiation, matching template arguments isn't
|
|
sufficient: `auto ref` parameters being ref or not also create different template instances.
|
|
This test checks that the special logic for it still works with named arguments.
|
|
*/
|
|
|
|
void autoref()(auto ref int x, auto ref int y)
|
|
{
|
|
pragma(msg, "(x: ", __traits(isRef, x), ", y: ", __traits(isRef, y), ")");
|
|
}
|
|
|
|
void main()
|
|
{
|
|
int REF = 0;
|
|
enum NOT = 0;
|
|
pragma(msg, "Call 0");
|
|
autoref(y: NOT, x: REF); // new instance
|
|
pragma(msg, "Call 1");
|
|
autoref(x: REF, y: NOT); // existing instance
|
|
pragma(msg, "Call 2");
|
|
autoref(x: NOT, y: NOT); // new instance
|
|
pragma(msg, "Call 3");
|
|
autoref(x: NOT, y: REF); // new instance
|
|
pragma(msg, "Call 4");
|
|
autoref(y: REF, x: NOT); // existing instance
|
|
}
|