| 185 | |
| 186 | template <bool checkargs = detail::default_safe_function_calls, std::size_t... I, typename R, typename... Args, typename Fx, typename... FxArgs> |
| 187 | inline decltype(auto) call(types<R>, types<Args...> argument_types_, std::index_sequence<I...> argument_indices_, lua_State* L_, |
| 188 | int start_index_, Fx&& fx_, FxArgs&&... args_) { |
| 189 | static_assert(meta::all_v<meta::is_not_move_only<Args>...>, |
| 190 | "One of the arguments being bound is a move-only type, and it is not being taken by reference: this will break your code. Please take " |
| 191 | "a reference and std::move it manually if this was your intention."); |
| 192 | argument_handler<types<R, Args...>> handler {}; |
| 193 | record tracking {}; |
| 194 | #if SOL_IS_OFF(SOL_PROPAGATE_EXCEPTIONS) |
| 195 | if constexpr (checkargs) { |
| 196 | multi_check<Args...>(L_, start_index_, handler); |
| 197 | } |
| 198 | #endif |
| 199 | if constexpr (std::is_void_v<R>) { |
| 200 | eval<checkargs>( |
| 201 | argument_types_, argument_indices_, L_, start_index_, handler, tracking, std::forward<Fx>(fx_), std::forward<FxArgs>(args_)...); |
| 202 | } |
| 203 | else { |
| 204 | return eval<checkargs>( |
| 205 | argument_types_, argument_indices_, L_, start_index_, handler, tracking, std::forward<Fx>(fx_), std::forward<FxArgs>(args_)...); |
| 206 | } |
| 207 | } |
| 208 | |
| 209 | template <typename T> |
| 210 | void raw_table_set(lua_State* L, T&& arg, int tableindex = -2) { |
no outgoing calls
no test coverage detected