view: enable in-place single type view specialization

This commit is contained in:
Michele Caini
2024-07-05 09:10:36 +02:00
parent d56a0a5fbd
commit 0753dd1aaa

View File

@@ -387,7 +387,7 @@ 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...>, std::enable_if_t<(sizeof...(Get) + sizeof...(Exclude) > 1) || (type_list_element_t<0u, type_list<Get...>>::storage_policy == deletion_policy::in_place)>>
class basic_view<get_t<Get...>, exclude_t<Exclude...>, std::enable_if_t<(sizeof...(Get) + sizeof...(Exclude) > 1)>>
: 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)>;
@@ -626,8 +626,6 @@ public:
*/
template<typename Type, deletion_policy Policy>
class basic_storage_view {
static_assert(Policy != deletion_policy::in_place, "Not supported yet");
protected:
/*! @cond TURN_OFF_DOXYGEN */
basic_storage_view() noexcept = default;
@@ -853,7 +851,7 @@ private:
* @tparam Get Type of storage iterated by the view.
*/
template<typename Get>
class basic_view<get_t<Get>, exclude_t<>, std::enable_if_t<Get::storage_policy != deletion_policy::in_place>>
class basic_view<get_t<Get>, exclude_t<>>
: public basic_storage_view<typename Get::base_type, Get::storage_policy> {
using base_type = basic_storage_view<typename Get::base_type, Get::storage_policy>;