Browse Source

view: get rid of a nasty trick on views

Michele Caini 1 year ago
parent
commit
8bb83ae64d
1 changed files with 4 additions and 2 deletions
  1. 4 2
      src/entt/entity/view.hpp

+ 4 - 2
src/entt/entity/view.hpp

@@ -387,7 +387,8 @@ protected:
  * @tparam Exclude Types of storage used to filter the view.
  */
 template<typename... Get, typename... Exclude>
-class basic_view<get_t<Get...>, exclude_t<Exclude...>>: public basic_common_view<std::common_type_t<typename Get::base_type..., typename Exclude::base_type...>, sizeof...(Get), sizeof...(Exclude)> {
+class basic_view<get_t<Get...>, exclude_t<Exclude...>, std::enable_if_t<(sizeof...(Get) + sizeof...(Exclude) > 1) || ((Get::storage_policy != deletion_policy::swap_and_pop) && ...)>>
+    : public basic_common_view<std::common_type_t<typename Get::base_type..., typename Exclude::base_type...>, sizeof...(Get), sizeof...(Exclude)> {
     using base_type = basic_common_view<std::common_type_t<typename Get::base_type..., typename Exclude::base_type...>, sizeof...(Get), sizeof...(Exclude)>;
 
     template<typename Type>
@@ -768,7 +769,8 @@ private:
  * @tparam Get Type of storage iterated by the view.
  */
 template<typename Get>
-class basic_view<get_t<Get>, exclude_t<>, std::void_t<std::enable_if_t<std::remove_const_t<Get>::storage_policy == deletion_policy::swap_and_pop>>>: public basic_swap_and_pop_view<typename Get::base_type> {
+class basic_view<get_t<Get>, exclude_t<>, std::enable_if_t<Get::storage_policy == deletion_policy::swap_and_pop>>
+    : public basic_swap_and_pop_view<typename Get::base_type> {
     using base_type = basic_swap_and_pop_view<typename Get::base_type>;
 
 public: