summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2023-04-09 14:29:37 +0200
committerStanislaw Halik <sthalik@misaki.pl>2023-04-09 14:29:37 +0200
commitcb3f364d0cf1e16bd94b5f29eff61b8de7401034 (patch)
tree46835f3cd28b9c81f843606978e5fc9ff05a1337
parentef69ab55709de5617159dc2879ecf91ad07dea1b (diff)
entities: fix error on duplicate field accessor types
-rw-r--r--entity/metadata.hpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/entity/metadata.hpp b/entity/metadata.hpp
index 8b1717b8..2bb8d346 100644
--- a/entity/metadata.hpp
+++ b/entity/metadata.hpp
@@ -250,19 +250,22 @@ namespace floormat {
template<typename T>
class entity_metadata final {
static_assert(std::is_same_v<T, std::decay_t<T>>);
- template<typename... Ts> static consteval auto erased_helper(const std::tuple<Ts...>& tuple);
+
+ template<typename Tuple, std::size_t... Ns>
+ static consteval auto erased_helper(const Tuple& tuple, std::index_sequence<Ns...>);
+
public:
static constexpr StringView class_name = name_of<T>;
static constexpr auto accessors = entities::entity_accessors<T>::accessors();
static constexpr size_t size = std::tuple_size_v<std::decay_t<decltype(accessors)>>;
- static constexpr auto erased_accessors = erased_helper(accessors);
+ static constexpr auto erased_accessors = erased_helper(accessors, std::make_index_sequence<size>{});
};
template<typename T>
-template<typename... Ts>
-consteval auto entity_metadata<T>::erased_helper(const std::tuple<Ts...>& tuple)
+template<typename Tuple, std::size_t... Ns>
+consteval auto entity_metadata<T>::erased_helper(const Tuple& tuple, std::index_sequence<Ns...>)
{
- std::array<entities::erased_accessor, sizeof...(Ts)> array { std::get<Ts>(tuple).erased()..., };
+ std::array<entities::erased_accessor, sizeof...(Ns)> array { std::get<Ns>(tuple).erased()..., };
return array;
}