Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compilation Error when Member Variables set in new_usertype. #1588

Closed
theanimatorspal opened this issue Mar 7, 2024 · 1 comment
Closed

Comments

@theanimatorspal
Copy link

So I upgraded my compiler, (clang, clang-cl) to the latest version and the following code works no more

	auto vec2_multiply_overloads = sol::overload(
		[](const glm::vec2& v1, const glm::vec2& v2) -> glm::vec2 { return v1 * v2; },
		[](const glm::vec2& v1, float value) -> glm::vec2 { return v1 * value; },
		[](float value, const glm::vec2& v1) -> glm::vec2 { return v1 * value; });

	auto vec2_divide_overloads = sol::overload(
		[](const glm::vec2& v1, const glm::vec2& v2) -> glm::vec2 { return v1 / v2; },
		[](const glm::vec2& v1, float value) -> glm::vec2 { return v1 / value; },
		[](float value, const glm::vec2& v1) -> glm::vec2{ return v1 / value; });

	auto vec2_addition_overloads = sol::overload(
		[](const glm::vec2& v1, const glm::vec2& v2) -> glm::vec2 { return v1 + v2; },
		[](const glm::vec2& v1, float value) -> glm::vec2 { return v1 + value; },
		[](float value, const glm::vec2& v1) -> glm::vec2 { return v1 + value; });

	auto vec2_subtraction_overloads = sol::overload(
		[](const glm::vec2& v1, const glm::vec2& v2) -> glm::vec2 { return v1 - v2; },
		[](const glm::vec2& v1, float value) -> glm::vec2 { return v1 - value; },
		[](float value, const glm::vec2& v1) -> glm::vec2 { return v1 - value; });

	lua.new_usertype<glm::vec2>(
		"vec2",
		sol::call_constructor,
		sol::constructors<glm::vec2(float), glm::vec2(float, float)>(),
		"x", &glm::vec2::x,
		"y", &glm::vec2::y,
		sol::meta_function::multiplication, vec2_multiply_overloads,
		sol::meta_function::division, vec2_divide_overloads,
		sol::meta_function::addition, vec2_addition_overloads,
		sol::meta_function::subtraction, vec2_subtraction_overloads,
		"length", [](const glm::vec2& v) { return glm::length(v); });

When I comment out the line with

	"x", &glm::vec2::x,
	"y", &glm::vec2::y

It Compiles, but if I don't comment then I get lots of compilation errors which say

hpp:19875:31: error: address of overloaded function 'call' does not match required type 'int (lua_State *)'
[build]  19875 |                                 lua_CFunction freefunc = &function_detail::upvalue_this_member_variable<C, Fx>::template call<is_yielding, no_trampoline>;
[build]        |                                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[build] C:/Users/sansk/OneDrive/Pictures/jkrgui/ksaivulkan/Vendor\sol/sol.hpp:20033:5: note: in instantiation of function template specialization 'sol::function_detail::select_member_variable<false, false, float glm::vec<2, float>::*>' requested here
[build]  20033 |                                 select_member_variable<is_yielding, no_trampoline>(L, std::forward<Fx>(fx), std::forward<Args>(args)...);
[build]        |                                 ^
[build] C:/Users/sansk/OneDrive/Pictures/jkrgui/ksaivulkan/Vendor\sol/sol.hpp:20157:22: note: in instantiation of function template specialization 'sol::function_detail::select<false, false, float glm::vec<2, float>::*>' requested here
[build]  20157 |                                 function_detail::select<false, false>(L, std::forward<Args>(args)...);
[build]        |                                                  ^
[build] C:/Users/sansk/OneDrive/Pictures/jkrgui/ksaivulkan/Vendor\sol/sol.hpp:11759:14: note: in instantiation of function template specialization 'sol::stack::unqualified_pusher<float glm::vec<2, float>::*>::push<float glm::vec<2, float>::*>' requested here
[build]  11759 |                                 return p.push(L, std::forward<T>(t), std::forward<Args>(args)...);
[build]        |                                          ^
[build] C:/Users/sansk/OneDrive/Pictures/jkrgui/ksaivulkan/Vendor\sol/sol.hpp:16257:7: note: in instantiation of function template specialization 'sol::stack::push<float glm::vec<2, float>::*>' requested here
[build]  16257 |                                                 push(L, std::forward<Value>(value));
[build]        |                                                 ^
[build] C:/Users/sansk/OneDrive/Pictures/jkrgui/ksaivulkan/Vendor\sol/sol.hpp:12131:59: note: in instantiation of function template specialization 'sol::stack::field_setter<char[2]>::set<const char (&)[2], float glm::vec<2, float>::*>' requested here
[build]  12131 |                         field_setter<meta::unqualified_t<Key>, global, raw> {}.set(L, std::forward<Key>(key), std::forward<Value>(value), tableindex);
[build]        |                                                                                ^
[build] C:/Users/sansk/OneDrive/Pictures/jkrgui/ksaivulkan/Vendor\sol/sol.hpp:25659:14: note: (skipping 3 contexts in backtrace; use -ftemplate-backtrace-limit=0 to see all)
[build]  25659 |                                                 stack::set_field<global, raw>(L, std::forward<Key>(key), std::forward<Keys>(keys)..., table_index);
[build]        |                                                        ^
[build] C:/Users/sansk/OneDrive/Pictures/jkrgui/ksaivulkan/Vendor\sol/sol.hpp:26372:20: note: in instantiation of function template specialization 'sol::basic_table_core<false, sol::basic_reference<false>>::set<const char (&)[2], float glm::vec<2, float>::*>' requested here
[build]  26372 |                                         table_base_t::set(std::forward<Key>(key), std::forward<Value>(value));
[build]        |                                                       ^
[build] C:/Users/sansk/OneDrive/Pictures/jkrgui/ksaivulkan/Vendor\sol/sol.hpp:26322:38: note: in instantiation of function template specialization 'sol::basic_usertype<glm::vec<2, float>, sol::basic_reference<false>>::set<const char (&)[2], float glm::vec<2, float>::*>' requested here
[build]  26322 |                         (void)detail::swallow { 0, (this->set(std::get<I * 2>(std::move(args)), std::get<I * 2 + 1>(std::move(args))), 0)... };
[build]        |                                                           ^
[build] C:/Users/sansk/OneDrive/Pictures/jkrgui/ksaivulkan/Vendor\sol/sol.hpp:26524:7: note: in instantiation of function template specialization 'sol::basic_usertype<glm::vec<2, float>, sol::basic_reference<false>>::tuple_set<0ULL, 1ULL, 2ULL, 3ULL, 4ULL, 5ULL, 6ULL, 7ULL, const sol::call_construction &, sol::constructor_list<glm::vec<2, float> (float), glm::vec<2, float> (float, float)> &&, const char (&)[2], float glm::vec<2, float>::*&&, const char (&)[2], float glm::vec<2, float>::*&&, sol::meta_function &&, sol::overload_set<(lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:7:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:8:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:9:3)> &, sol::meta_function &&, sol::overload_set<(lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:12:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:13:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:14:3)> &, sol::meta_function &&, sol::overload_set<(lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:17:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:18:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:19:3)> &, sol::meta_function &&, sol::overload_set<(lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:22:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:23:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:24:3)> &, const char (&)[7], (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:36:13) &&>' requested here
[build]  26524 |                         ut.tuple_set(std::make_index_sequence<(sizeof...(Args) + 1) / 2>(), std::forward_as_tuple(std::forward<Arg>(arg), std::forward<Args>(args)...));
[build]        |                            ^
[build] C:/Users/sansk/OneDrive/Pictures/jkrgui/ksaivulkan/Vendor\sol/sol.hpp:27984:18: note: in instantiation of function template specialization 'sol::basic_table_core<true, sol::basic_reference<false>>::new_usertype<glm::vec<2, float>, const char (&)[5], const sol::call_construction &, sol::constructor_list<glm::vec<2, float> (float), glm::vec<2, float> (float, float)>, const char (&)[2], float glm::vec<2, float>::*, const char (&)[2], float glm::vec<2, float>::*, sol::meta_function, sol::overload_set<(lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:7:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:8:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:9:3)> &, sol::meta_function, sol::overload_set<(lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:12:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:13:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:14:3)> &, sol::meta_function, sol::overload_set<(lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:17:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:18:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:19:3)> &, sol::meta_function, sol::overload_set<(lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:22:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:23:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:24:3)> &, const char (&)[7], (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:36:13), void>' requested here
[build]  27984 |                         return global.new_usertype<Class>(std::forward<Args>(args)...);
[build]        |                                       ^
[build] C:/Users/sansk/OneDrive/Pictures/jkrgui/JkrLuaExe/JkrMath.cpp:26:6: note: in instantiation of function template specialization 'sol::state_view::new_usertype<glm::vec<2, float>, const char (&)[5], const sol::call_construction &, sol::constructor_list<glm::vec<2, float> (float), glm::vec<2, float> (float, float)>, const char (&)[2], float glm::vec<2, float>::*, const char (&)[2], float glm::vec<2, float>::*, sol::meta_function, sol::overload_set<(lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:7:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:8:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:9:3)> &, sol::meta_function, sol::overload_set<(lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:12:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:13:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:14:3)> &, sol::meta_function, sol::overload_set<(lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:17:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:18:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:19:3)> &, sol::meta_function, sol::overload_set<(lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:22:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:23:3), (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:24:3)> &, const char (&)[7], (lambda at C:\Users\sansk\OneDrive\Pictures\jkrgui\JkrLuaExe\JkrMath.cpp:36:13)>' requested here
[build]    26 |         lua.new_usertype<glm::vec2>(
[build]       |             ^
[build] C:/Users/sansk/OneDrive/Pictures/jkrgui/ksaivulkan/Vendor\sol/sol.hpp:19419:14: note: candidate template ignored: substitution failure [with is_yielding = false, no_trampoline = false]
[build]  19419 |                 static int call(lua_State* L) noexcept(std::is_nothrow_copy_assignable_v<T>) {
[build]        |                            ^
[build] 1 error generated.
[build] ninja: build stopped: subcommand failed. ```
@theanimatorspal
Copy link
Author

I saw #1581 , Closing this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant