diff options
| -rw-r--r-- | source/slang/slang-check-decl.cpp | 3 | ||||
| -rw-r--r-- | tests/language-feature/static-members/generic-static-method.slang | 30 |
2 files changed, 33 insertions, 0 deletions
diff --git a/source/slang/slang-check-decl.cpp b/source/slang/slang-check-decl.cpp index fef24e920..d028ebfe4 100644 --- a/source/slang/slang-check-decl.cpp +++ b/source/slang/slang-check-decl.cpp @@ -539,6 +539,9 @@ namespace Slang bool SemanticsVisitor::isDeclUsableAsStaticMember( Decl* decl) { + if(auto genericDecl = as<GenericDecl>(decl)) + decl = genericDecl->inner; + if(decl->HasModifier<HLSLStaticModifier>()) return true; diff --git a/tests/language-feature/static-members/generic-static-method.slang b/tests/language-feature/static-members/generic-static-method.slang new file mode 100644 index 000000000..b1868175f --- /dev/null +++ b/tests/language-feature/static-members/generic-static-method.slang @@ -0,0 +1,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); +} |
