mirror of
https://github.com/boostorg/container.git
synced 2025-08-01 13:34:30 +02:00
Added C++03 portable aliases and tests. Fixes #129 ("Alias templates for small_flat_[multi]{set|map} using small_vector as container")
This commit is contained in:
@@ -1319,7 +1319,8 @@ use [*Boost.Container]? There are several reasons for that:
|
||||
|
||||
[section:release_notes_boost_1_74_00 Boost 1.74 Release]
|
||||
|
||||
* Fixed bugs:
|
||||
* Fixed bugs/issues:
|
||||
* [@https://github.com/boostorg/container/issues/129 GitHub #129: ['"Alias templates for small_flat_[multi]{set|map} using small_vector as container"]].
|
||||
* [@https://github.com/boostorg/container/issues/144 GitHub #144: ['"GCC suggest-override warnings"]].
|
||||
* [@https://github.com/boostorg/container/issues/145 GitHub #145: ['"Allocations not handled correctly in some cases of vector move with unequal allocators"]].
|
||||
* [@https://github.com/boostorg/container/pull/146 GitHub #146: ['"Changes for Embarcadero C++ clang-based compilers, targeting Boost 1.74. Addition needed for Embarcardero clang-based compilers"]].
|
||||
|
@@ -220,6 +220,52 @@ using small_flat_multimap = flat_multimap<Key, T, Compare, small_vector<std::pai
|
||||
#endif // #ifndef BOOST_NO_CXX11_TEMPLATE_ALIASES
|
||||
|
||||
|
||||
//! A portable metafunction to obtain a small_flat_set
|
||||
template < class Key
|
||||
, std::size_t N
|
||||
, class Compare = std::less<Key>
|
||||
, class SmallVectorAllocator = void
|
||||
, class SmallVectorOptions = void >
|
||||
struct small_flat_set_of
|
||||
{
|
||||
typedef flat_set<Key, Compare, small_vector<Key, N, SmallVectorAllocator, SmallVectorOptions> > type;
|
||||
};
|
||||
|
||||
//! A portable metafunction to obtain a small_flat_multiset
|
||||
template < class Key
|
||||
, std::size_t N
|
||||
, class Compare = std::less<Key>
|
||||
, class SmallVectorAllocator = void
|
||||
, class SmallVectorOptions = void >
|
||||
struct small_flat_multiset_of
|
||||
{
|
||||
typedef flat_multiset<Key, Compare, small_vector<Key, N, SmallVectorAllocator, SmallVectorOptions> > type;
|
||||
};
|
||||
|
||||
//! A portable metafunction to obtain a small_flat_map
|
||||
template < class Key
|
||||
, class T
|
||||
, std::size_t N
|
||||
, class Compare = std::less<Key>
|
||||
, class SmallVectorAllocator = void
|
||||
, class SmallVectorOptions = void >
|
||||
struct small_flat_map_of
|
||||
{
|
||||
typedef flat_map<Key, T, Compare, small_vector<std::pair<Key, T>, N, SmallVectorAllocator, SmallVectorOptions> > type;
|
||||
};
|
||||
|
||||
//! A portable metafunction to obtain a small_flat_multimap
|
||||
template < class Key
|
||||
, class T
|
||||
, std::size_t N
|
||||
, class Compare = std::less<Key>
|
||||
, class SmallVectorAllocator = void
|
||||
, class SmallVectorOptions = void >
|
||||
struct small_flat_multimap_of
|
||||
{
|
||||
typedef flat_multimap<Key, T, Compare, small_vector<std::pair<Key, T>, N, SmallVectorAllocator, SmallVectorOptions> > type;
|
||||
};
|
||||
|
||||
template <class CharT
|
||||
,class Traits = std::char_traits<CharT>
|
||||
,class Allocator = void >
|
||||
|
@@ -13,6 +13,7 @@
|
||||
#include <boost/container/stable_vector.hpp>
|
||||
#include <boost/container/vector.hpp>
|
||||
#include <boost/container/deque.hpp>
|
||||
#include <boost/static_assert.hpp>
|
||||
|
||||
#include <boost/container/detail/container_or_allocator_rebind.hpp>
|
||||
|
||||
@@ -99,6 +100,20 @@ int main()
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
{
|
||||
using namespace boost::container;
|
||||
using boost::container::dtl::is_same;
|
||||
|
||||
typedef flat_map<int, float, std::less<int>, small_vector<std::pair<int, float>, 10> > map_container_t;
|
||||
typedef flat_multimap<int, float, std::less<int>, small_vector<std::pair<int, float>, 10> > multimap_container_t;
|
||||
#if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
|
||||
BOOST_STATIC_ASSERT(( is_same<map_container_t, small_flat_map<int, float, 10> >::value ));
|
||||
BOOST_STATIC_ASSERT(( is_same<multimap_container_t, small_flat_multimap<int, float, 10> >::value ));
|
||||
#endif
|
||||
|
||||
BOOST_STATIC_ASSERT(( is_same<map_container_t, small_flat_map_of<int, float, 10>::type >::value ));
|
||||
BOOST_STATIC_ASSERT(( is_same<multimap_container_t, small_flat_multimap_of<int, float, 10>::type >::value ));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -13,6 +13,7 @@
|
||||
#include <boost/container/stable_vector.hpp>
|
||||
#include <boost/container/vector.hpp>
|
||||
#include <boost/container/deque.hpp>
|
||||
#include <boost/static_assert.hpp>
|
||||
|
||||
#include <boost/container/detail/container_or_allocator_rebind.hpp>
|
||||
|
||||
@@ -96,6 +97,19 @@ int main()
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
{
|
||||
using namespace boost::container;
|
||||
using boost::container::dtl::is_same;
|
||||
|
||||
typedef flat_set<int, std::less<int>, small_vector<int, 10> > set_container_t;
|
||||
typedef flat_multiset<int, std::less<int>, small_vector<int, 10> > multiset_container_t;
|
||||
#if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
|
||||
BOOST_STATIC_ASSERT(( is_same<set_container_t, small_flat_set<int, 10> >::value ));
|
||||
BOOST_STATIC_ASSERT(( is_same<multiset_container_t, small_flat_multiset<int, 10> >::value ));
|
||||
#endif
|
||||
BOOST_STATIC_ASSERT(( is_same<set_container_t, small_flat_set_of<int, 10>::type >::value ));
|
||||
BOOST_STATIC_ASSERT(( is_same<multiset_container_t, small_flat_multiset_of<int, 10>::type >::value ));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user