f25c767a2b
Most template type parameters 'Allocator' were modified their default type to void since 1.70.0. These modifications cause has_trivial_destructor_after_move to compile error or yield wrong result. So, fix them by changing specializations of has_trivial_destructor_after_move.
157 lines
4.5 KiB
C++
157 lines
4.5 KiB
C++
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// (C) Copyright Ion Gaztanaga 2004-2013. Distributed under the Boost
|
|
// Software License, Version 1.0. (See accompanying file
|
|
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
//
|
|
// See http://www.boost.org/libs/container for documentation.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
#include <boost/container/detail/flat_tree.hpp>
|
|
#include <boost/container/small_vector.hpp>
|
|
#include <boost/container/stable_vector.hpp>
|
|
#include <boost/container/static_vector.hpp>
|
|
|
|
#include <iostream>
|
|
|
|
#include "movable_int.hpp"
|
|
#include "dummy_test_allocator.hpp"
|
|
|
|
using namespace boost::container;
|
|
|
|
typedef boost::container::dtl::pair<test::movable_and_copyable_int, test::movable_and_copyable_int> pair_t;
|
|
|
|
namespace boost {
|
|
namespace container {
|
|
|
|
//Explicit instantiation to detect compilation errors
|
|
|
|
namespace dtl {
|
|
|
|
template class flat_tree
|
|
< pair_t
|
|
, select1st<test::movable_and_copyable_int>
|
|
, std::less<test::movable_and_copyable_int>
|
|
, test::simple_allocator<pair_t>
|
|
>;
|
|
|
|
template class flat_tree
|
|
< pair_t
|
|
, select1st<test::movable_and_copyable_int>
|
|
, std::less<test::movable_and_copyable_int>
|
|
, std::allocator<pair_t>
|
|
>;
|
|
|
|
template class flat_tree
|
|
< pair_t
|
|
, select1st<test::movable_and_copyable_int>
|
|
, std::less<test::movable_and_copyable_int>
|
|
, small_vector<pair_t, 10>
|
|
>;
|
|
|
|
template class flat_tree
|
|
< pair_t
|
|
, select1st<test::movable_and_copyable_int>
|
|
, std::less<test::movable_and_copyable_int>
|
|
, stable_vector<pair_t>
|
|
>;
|
|
|
|
template class flat_tree
|
|
< test::movable_and_copyable_int
|
|
, identity<test::movable_and_copyable_int>
|
|
, std::less<test::movable_and_copyable_int>
|
|
, test::simple_allocator<test::movable_and_copyable_int>
|
|
>;
|
|
|
|
template class flat_tree
|
|
< test::movable_and_copyable_int
|
|
, identity<test::movable_and_copyable_int>
|
|
, std::less<test::movable_and_copyable_int>
|
|
, std::allocator<test::movable_and_copyable_int>
|
|
>;
|
|
|
|
template class flat_tree
|
|
< test::movable_and_copyable_int
|
|
, identity<test::movable_and_copyable_int>
|
|
, std::less<test::movable_and_copyable_int>
|
|
, small_vector<test::movable_and_copyable_int, 10>
|
|
>;
|
|
|
|
template class flat_tree
|
|
< test::movable_and_copyable_int
|
|
, identity<test::movable_and_copyable_int>
|
|
, std::less<test::movable_and_copyable_int>
|
|
, stable_vector<test::movable_and_copyable_int>
|
|
>;
|
|
|
|
template class flat_tree
|
|
< test::movable_and_copyable_int
|
|
, identity<test::movable_and_copyable_int>
|
|
, std::less<test::movable_and_copyable_int>
|
|
, static_vector<test::movable_and_copyable_int, 10>
|
|
>;
|
|
|
|
} //dtl {
|
|
}} //boost::container
|
|
|
|
#if (__cplusplus > 201103L)
|
|
#include <vector>
|
|
|
|
namespace boost{
|
|
namespace container{
|
|
namespace dtl{
|
|
|
|
template class flat_tree
|
|
< test::movable_and_copyable_int
|
|
, identity<test::movable_and_copyable_int>
|
|
, std::less<test::movable_and_copyable_int>
|
|
, std::vector<test::movable_and_copyable_int>
|
|
>;
|
|
|
|
template class flat_tree
|
|
< pair_t
|
|
, select1st<test::movable_and_copyable_int>
|
|
, std::less<test::movable_and_copyable_int>
|
|
, std::vector<pair_t>
|
|
>;
|
|
|
|
} //dtl {
|
|
}} //boost::container
|
|
|
|
#endif
|
|
|
|
int main ()
|
|
{
|
|
////////////////////////////////////
|
|
// has_trivial_destructor_after_move testing
|
|
////////////////////////////////////
|
|
// default
|
|
{
|
|
typedef boost::container::dtl::flat_tree<int, boost::container::dtl::identity<int>,
|
|
std::less<int>, void> tree;
|
|
typedef tree::container_type container_type;
|
|
typedef tree::key_compare key_compare;
|
|
if (boost::has_trivial_destructor_after_move<tree>::value !=
|
|
boost::has_trivial_destructor_after_move<container_type>::value &&
|
|
boost::has_trivial_destructor_after_move<key_compare>::value) {
|
|
std::cerr << "has_trivial_destructor_after_move(default allocator) test failed" << std::endl;
|
|
return 1;
|
|
}
|
|
}
|
|
// std::allocator
|
|
{
|
|
typedef boost::container::dtl::flat_tree<int, boost::container::dtl::identity<int>,
|
|
std::less<int>, std::allocator<int> > tree;
|
|
typedef tree::container_type container_type;
|
|
typedef tree::key_compare key_compare;
|
|
if (boost::has_trivial_destructor_after_move<tree>::value !=
|
|
boost::has_trivial_destructor_after_move<container_type>::value &&
|
|
boost::has_trivial_destructor_after_move<key_compare>::value) {
|
|
std::cerr << "has_trivial_destructor_after_move(std::allocator) test failed" << std::endl;
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|