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