@@ -2111,6 +2111,48 @@ TEST(FunctionReflectionTest, GetFunctionCallWrapper) {
21112111
21122112 auto op_callable = Cpp::MakeFunctionCallable (op);
21132113 EXPECT_EQ (op_callable.getKind (), Cpp::JitCall::kGenericCall );
2114+
2115+ Cpp::Declare (R"(
2116+ enum class MyEnum { A, B, C };
2117+ template <MyEnum E>
2118+ class TemplatedEnum {};
2119+
2120+ namespace MyNameSpace {
2121+ enum class MyEnum { A, B, C };
2122+ template <MyEnum E>
2123+ class TemplatedEnum {};
2124+ }
2125+ )" );
2126+
2127+ Cpp::TCppScope_t TemplatedEnum = Cpp::GetScope (" TemplatedEnum" );
2128+ EXPECT_TRUE (TemplatedEnum);
2129+
2130+ auto TAI_enum =
2131+ Cpp::TemplateArgInfo (Cpp::GetTypeFromScope (Cpp::GetNamed (" MyEnum" )), " 1" );
2132+ Cpp::TCppScope_t TemplatedEnum_instantiated =
2133+ Cpp::InstantiateTemplate (TemplatedEnum, &TAI_enum, 1 );
2134+ EXPECT_TRUE (TemplatedEnum_instantiated);
2135+
2136+ Cpp::TCppObject_t obj = Cpp::Construct (TemplatedEnum_instantiated);
2137+ EXPECT_TRUE (obj);
2138+ Cpp::Destruct (obj, TemplatedEnum_instantiated);
2139+ obj = nullptr ;
2140+
2141+ Cpp::TCppScope_t MyNameSpace_TemplatedEnum =
2142+ Cpp::GetScope (" TemplatedEnum" , Cpp::GetScope (" MyNameSpace" ));
2143+ EXPECT_TRUE (TemplatedEnum);
2144+
2145+ TAI_enum = Cpp::TemplateArgInfo (Cpp::GetTypeFromScope (Cpp::GetNamed (
2146+ " MyEnum" , Cpp::GetScope (" MyNameSpace" ))),
2147+ " 1" );
2148+ Cpp::TCppScope_t MyNameSpace_TemplatedEnum_instantiated =
2149+ Cpp::InstantiateTemplate (MyNameSpace_TemplatedEnum, &TAI_enum, 1 );
2150+ EXPECT_TRUE (TemplatedEnum_instantiated);
2151+
2152+ obj = Cpp::Construct (MyNameSpace_TemplatedEnum_instantiated);
2153+ EXPECT_TRUE (obj);
2154+ Cpp::Destruct (obj, MyNameSpace_TemplatedEnum_instantiated);
2155+ obj = nullptr ;
21142156}
21152157
21162158TEST (FunctionReflectionTest, IsConstMethod) {
0 commit comments