Closed
Description
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. ```
Metadata
Metadata
Assignees
Labels
No labels