| 10086 | |
| 10087 | template <typename T, typename... Args> |
| 10088 | int push(lua_State* L, T&& t, Args&&... args) { |
| 10089 | using Tu = meta::unqualified_t<T>; |
| 10090 | if constexpr (meta::meta_detail::is_adl_sol_lua_push_exact_v<T, T, Args...>) { |
| 10091 | return sol_lua_push(types<T>(), L, std::forward<T>(t), std::forward<Args>(args)...); |
| 10092 | } |
| 10093 | else if constexpr (meta::meta_detail::is_adl_sol_lua_push_exact_v<Tu, T, Args...>) { |
| 10094 | return sol_lua_push(types<Tu>(), L, std::forward<T>(t), std::forward<Args>(args)...); |
| 10095 | } |
| 10096 | else if constexpr (meta::meta_detail::is_adl_sol_lua_push_v<T, Args...>) { |
| 10097 | return sol_lua_push(L, std::forward<T>(t), std::forward<Args>(args)...); |
| 10098 | } |
| 10099 | else { |
| 10100 | unqualified_pusher<Tu> p {}; |
| 10101 | (void)p; |
| 10102 | return p.push(L, std::forward<T>(t), std::forward<Args>(args)...); |
| 10103 | } |
| 10104 | } |
| 10105 | |
| 10106 | // overload allows to use a pusher of a specific type, but pass in any kind of args |
| 10107 | template <typename T, typename Arg, typename... Args, typename = std::enable_if_t<!std::is_same<T, Arg>::value>> |
no test coverage detected