diff --git a/src/entt/container/dense_map.hpp b/src/entt/container/dense_map.hpp index 2255915e1..64c0f09c4 100644 --- a/src/entt/container/dense_map.hpp +++ b/src/entt/container/dense_map.hpp @@ -599,19 +599,27 @@ public: * insertion took place. */ template - std::pair emplace(Args &&...args) { - auto &node = packed.first().emplace_back(packed.first().size(), std::forward(args)...); - const auto index = key_to_bucket(node.element.first); + std::pair emplace([[maybe_unused]] Args &&...args) { + if constexpr(sizeof...(Args) == 0u) { + return insert_or_do_nothing(key_type{}); + } else if constexpr(sizeof...(Args) == 1u) { + return insert_or_do_nothing(std::forward(args).first..., std::forward(args).second...); + } else if constexpr(sizeof...(Args) == 2u) { + return insert_or_do_nothing(std::forward(args)...); + } else { + auto &node = packed.first().emplace_back(packed.first().size(), std::forward(args)...); + const auto index = key_to_bucket(node.element.first); - if(auto it = constrained_find(node.element.first, index); it != end()) { - packed.first().pop_back(); - return std::make_pair(it, false); + if(auto it = constrained_find(node.element.first, index); it != end()) { + packed.first().pop_back(); + return std::make_pair(it, false); + } + + std::swap(node.next, sparse.first()[index]); + rehash_if_required(); + + return std::make_pair(--end(), true); } - - std::swap(node.next, sparse.first()[index]); - rehash_if_required(); - - return std::make_pair(--end(), true); } /**