@@ -217,15 +217,17 @@ namespace sol {
217217 start,
218218 std::forward<Args>(args)...);
219219 }
220- if (!traits::runtime_variadics_t ::value && traits::free_arity != fxarity) {
221- return overload_match_arity (types<>(),
222- std::index_sequence<>(),
223- std::index_sequence<traits::free_arity, M...>(),
224- std::forward<Match>(matchfx),
225- L,
226- fxarity,
227- start,
228- std::forward<Args>(args)...);
220+ if constexpr (!traits::runtime_variadics_t ::value) {
221+ if (traits::free_arity != fxarity) {
222+ return overload_match_arity (types<>(),
223+ std::index_sequence<>(),
224+ std::index_sequence<traits::free_arity, M...>(),
225+ std::forward<Match>(matchfx),
226+ L,
227+ fxarity,
228+ start,
229+ std::forward<Args>(args)...);
230+ }
229231 }
230232 return matchfx (types<Fx>(), meta::index_value<I>(), return_types (), args_list (), L, fxarity, start, std::forward<Args>(args)...);
231233 }
@@ -315,6 +317,8 @@ namespace sol {
315317 stack::stack_detail::undefined_metatable umf (L, &meta[0 ], &stack::stack_detail::set_undefined_methods_on<T>);
316318 umf ();
317319
320+ // put userdata at the first index
321+ lua_insert (L, 1 );
318322 construct_match<T, TypeLists...>(constructor_match<T, checked, clean_stack>(obj), L, argcount, 1 + static_cast <int >(syntax));
319323
320324 userdataref.push ();
@@ -639,7 +643,9 @@ namespace sol {
639643 stack::stack_detail::undefined_metatable umf (L, &meta[0 ], &stack::stack_detail::set_undefined_methods_on<T>);
640644 umf ();
641645
642- construct_match<T, Args...>(constructor_match<T, checked, clean_stack>(obj), L, argcount, boost + 1 + static_cast <int >(syntax));
646+ // put userdata at the first index
647+ lua_insert (L, 1 );
648+ construct_match<T, Args...>(constructor_match<T, checked, clean_stack>(obj), L, argcount, boost + 1 + 1 + static_cast <int >(syntax));
643649
644650 userdataref.push ();
645651 return 1 ;
@@ -660,7 +666,9 @@ namespace sol {
660666 umf ();
661667
662668 auto & func = std::get<I>(f.functions );
663- stack::call_into_lua<checked, clean_stack>(r, a, L, boost + start, func, detail::implicit_wrapper<T>(obj));
669+ // put userdata at the first index
670+ lua_insert (L, 1 );
671+ stack::call_into_lua<checked, clean_stack>(r, a, L, boost + 1 + start, func, detail::implicit_wrapper<T>(obj));
664672
665673 userdataref.push ();
666674 return 1 ;
0 commit comments