mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 13:10:12 +03:00
24 lines
749 B
D
24 lines
749 B
D
/*
|
|
TEST_OUTPUT:
|
|
----
|
|
instantiated:long
|
|
instantiated:int
|
|
----
|
|
*/
|
|
struct S {
|
|
static int foo(T)(int i) { pragma(msg, "instantiated:", T.stringof); return 0; }
|
|
static int foo(T)(string s) { return 1; }
|
|
}
|
|
|
|
alias foo0 = __traits(getOverloads, S, "foo", true)[0];
|
|
alias bar0 = foo0!long; // prints "instantiated:long"
|
|
enum x = S.foo!long(0); // should not print "instantiated:long" again.
|
|
static assert(bar0(3) == 0);
|
|
alias bar0int = foo0!int; // prints "instantiated:int"
|
|
enum y = S.foo!int(0); // should not print "instantiated:int" again.
|
|
static assert(!__traits(compiles, bar0("hi")));
|
|
|
|
alias foo1 = __traits(getOverloads, S, "foo", true)[1];
|
|
alias bar1 = foo1!long;
|
|
static assert(bar1("hi") == 1);
|
|
static assert(!__traits(compiles, bar1(3)));
|