summaryrefslogtreecommitdiffstats
path: root/tests/language-feature/static-members/generic-static-method.slang
blob: b1868175ff6c01c976690ebecfe95cbbb2f9eed6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// generic-static-method.slang

// Confirm that the compiler can handle a generic
// `static` method declaration and call.

//TEST:SIMPLE:

interface IFrobnicator
{
    float frobnicate(float value);
}

struct Doubler : IFrobnicator
{
    float frobnicate(float value) { return 2.0f * value; }
}

struct FrobnicateHelpers
{
    static float doubleFrobnicate<F : IFrobnicator>(F f, float value)
    {
        return f.frobnicate(f.frobnicate(value));
    }
}

float test(float value)
{
    Doubler d;
    return FrobnicateHelpers.doubleFrobnicate(d, value);
}