Subject: [Boost-bugs] [Boost C++ Libraries] #1634: boost::interprocess::vector cannot contain volatile int
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2008-02-13 09:49:34
#1634: boost::interprocess::vector cannot contain volatile int
-----------------------------------------------+----------------------------
Reporter: Lars Hagström <lars_at_[hidden]> | Owner: igaztanaga
Type: Bugs | Status: new
Milestone: To Be Determined | Component: interprocess
Version: Boost Development Trunk | Severity: Problem
Keywords: |
-----------------------------------------------+----------------------------
It does not appear to be possible to create a
boost::interprocess::vector<volatile int>.
When modifying the example at
[http://igaztanaga.drivehq.com/interprocess/interprocess/quick_guide/qg_interprocess_container.html]
to use volatile int instead of int I get the following long list of
errors.
{{{
boost/interprocess/containers/vector.hpp: In member function âvoid
boost::interprocess::vector<T, A>::push_back(const T&) [with T = volatile
int, A = boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â:
volint.cpp:37: instantiated from here
boost/interprocess/containers/vector.hpp:853: error: invalid conversion
from âvolatile void*â to âvoid*â
boost/interprocess/containers/vector.hpp:853: error: initializing
argument 2 of âvoid* operator new(size_t, void*)â
boost/interprocess/allocators/allocator.hpp: In member function âvoid
boost::interprocess::allocator<T, SegmentManager>::deallocate(const
typename boost::interprocess::detail::pointer_to_other<typename
boost::interprocess::detail::pointer_to_other<typename
SegmentManager::void_pointer, const void>::type, T>::type&, size_t) [with
T = volatile int, SegmentManager =
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >,
boost::interprocess::iset_index>]â:
boost/interprocess/containers/vector.hpp:1284: instantiated from âvoid
boost::interprocess::vector<T, A>::priv_range_insert_new_allocation(T*,
typename A::size_type, T*, FwdIt, FwdIt) [with FwdIt =
boost::interprocess::constant_iterator<volatile int, int>, T = volatile
int, A = boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:1202: instantiated from âvoid
boost::interprocess::vector<T, A>::priv_range_insert(typename A::pointer,
FwdIt, FwdIt, std::forward_iterator_tag) [with FwdIt =
boost::interprocess::constant_iterator<volatile int, int>, T = volatile
int, A = boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:1772: instantiated from âvoid
boost::interprocess::vector<T,
A>::priv_insert_dispatch(boost::interprocess::detail::vector_iterator<typename
A::pointer>, InIt, InIt, boost::interprocess::detail::false_) [with InIt =
boost::interprocess::constant_iterator<volatile int, int>, T = volatile
int, A = boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:994: instantiated from âvoid
boost::interprocess::vector<T,
A>::insert(boost::interprocess::detail::vector_iterator<typename
A::pointer>, InIt, InIt) [with InIt =
boost::interprocess::constant_iterator<volatile int, int>, T = volatile
int, A = boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:1005: instantiated from âvoid
boost::interprocess::vector<T,
A>::insert(boost::interprocess::detail::vector_iterator<typename
A::pointer>, typename A::size_type, const T&) [with T = volatile int, A =
boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:946: instantiated from
âboost::interprocess::detail::vector_iterator<typename A::pointer>
boost::interprocess::vector<T,
A>::insert(boost::interprocess::detail::vector_iterator<typename
A::pointer>, const T&) [with T = volatile int, A =
boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:857: instantiated from âvoid
boost::interprocess::vector<T, A>::push_back(const T&) [with T = volatile
int, A = boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
volint.cpp:37: instantiated from here
boost/interprocess/allocators/allocator.hpp:157: error: invalid conversion
from âvolatile void*â to âvoid*â
boost/interprocess/allocators/allocator.hpp:157: error: initializing
argument 1 of âvoid
boost::interprocess::segment_manager_base<MemoryManager>::deallocate(void*)
[with MemoryAlgorithm =
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >]â
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include/g++-v4/bits/stl_construct.h:
In function âvoid std::_Construct(_T1*, const _T2&) [with _T1 = volatile
int, _T2 = volatile int]â:
/usr/lib/gcc/i686-pc-linux-
gnu/4.1.2/include/g++-v4/bits/stl_uninitialized.h:86: instantiated from
â_ForwardIterator std::__uninitialized_copy_aux(_InputIterator,
_InputIterator, _ForwardIterator, __false_type) [with _InputIterator =
boost::interprocess::detail::move_iterator<volatile int*>,
_ForwardIterator = volatile int*]â
/usr/lib/gcc/i686-pc-linux-
gnu/4.1.2/include/g++-v4/bits/stl_uninitialized.h:113: instantiated from
â_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator,
_ForwardIterator) [with _InputIterator =
boost::interprocess::detail::move_iterator<volatile int*>,
_ForwardIterator = volatile int*]â
boost/interprocess/containers/vector.hpp:1223: instantiated from âvoid
boost::interprocess::vector<T, A>::priv_range_insert_expand_forward(T*,
FwdIt, FwdIt, typename A::size_type) [with FwdIt =
boost::interprocess::constant_iterator<volatile int, int>, T = volatile
int, A = boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:1187: instantiated from âvoid
boost::interprocess::vector<T, A>::priv_range_insert(typename A::pointer,
FwdIt, FwdIt, std::forward_iterator_tag) [with FwdIt =
boost::interprocess::constant_iterator<volatile int, int>, T = volatile
int, A = boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:1772: instantiated from âvoid
boost::interprocess::vector<T,
A>::priv_insert_dispatch(boost::interprocess::detail::vector_iterator<typename
A::pointer>, InIt, InIt, boost::interprocess::detail::false_) [with InIt =
boost::interprocess::constant_iterator<volatile int, int>, T = volatile
int, A = boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:994: instantiated from âvoid
boost::interprocess::vector<T,
A>::insert(boost::interprocess::detail::vector_iterator<typename
A::pointer>, InIt, InIt) [with InIt =
boost::interprocess::constant_iterator<volatile int, int>, T = volatile
int, A = boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:1005: instantiated from âvoid
boost::interprocess::vector<T,
A>::insert(boost::interprocess::detail::vector_iterator<typename
A::pointer>, typename A::size_type, const T&) [with T = volatile int, A =
boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:946: instantiated from
âboost::interprocess::detail::vector_iterator<typename A::pointer>
boost::interprocess::vector<T,
A>::insert(boost::interprocess::detail::vector_iterator<typename
A::pointer>, const T&) [with T = volatile int, A =
boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:857: instantiated from âvoid
boost::interprocess::vector<T, A>::push_back(const T&) [with T = volatile
int, A = boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
volint.cpp:37: instantiated from here
/usr/lib/gcc/i686-pc-linux-
gnu/4.1.2/include/g++-v4/bits/stl_construct.h:81: error: invalid
static_cast from type âvolatile int*â to type âvoid*â
boost/interprocess/mem_algo/rbtree_best_fit.hpp: In member function
âstd::pair<T*, bool> boost::interprocess::rbtree_best_fit<MutexFamily,
VoidMutex>::allocation_command(boost::interprocess::allocation_type,
size_t, size_t, size_t&, T*) [with T = volatile int, MutexFamily =
boost::interprocess::mutex_family, VoidPointer =
boost::interprocess::offset_ptr<void>]â:
boost/interprocess/segment_manager.hpp:186: instantiated from
âstd::pair<T*, bool>
boost::interprocess::segment_manager_base<MemoryManager>::allocation_command(boost::interprocess::allocation_type,
size_t, size_t, size_t&, T*) [with T = volatile int, MemoryAlgorithm =
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >]â
boost/interprocess/allocators/allocator.hpp:178: instantiated from
âstd::pair<typename boost::interprocess::detail::pointer_to_other<typename
boost::interprocess::detail::pointer_to_other<typename
SegmentManager::void_pointer, const void>::type, T>::type, bool>
boost::interprocess::allocator<T,
SegmentManager>::allocation_command(boost::interprocess::allocation_type,
size_t, size_t, size_t&, const typename
boost::interprocess::detail::pointer_to_other<typename
boost::interprocess::detail::pointer_to_other<typename
SegmentManager::void_pointer, const void>::type, T>::type&) [with T =
volatile int, SegmentManager = boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >,
boost::interprocess::iset_index>]â
boost/interprocess/containers/vector.hpp:305: instantiated from
âstd::pair<typename A::pointer, bool>
boost::interprocess::detail::vector_alloc_holder<A>::allocation_command(boost::interprocess::allocation_type,
typename A::size_type, typename A::size_type, typename A::size_type&,
const typename A::pointer&,
boost::interprocess::detail::integral_constant<unsigned int, 2u>) [with A
= boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:277: instantiated from
âstd::pair<typename A::pointer, bool>
boost::interprocess::detail::vector_alloc_holder<A>::allocation_command(boost::interprocess::allocation_type,
typename A::size_type, typename A::size_type, typename A::size_type&,
const typename A::pointer&) [with A =
boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:1174: instantiated from âvoid
boost::interprocess::vector<T, A>::priv_range_insert(typename A::pointer,
FwdIt, FwdIt, std::forward_iterator_tag) [with FwdIt =
boost::interprocess::constant_iterator<volatile int, int>, T = volatile
int, A = boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:1772: instantiated from âvoid
boost::interprocess::vector<T,
A>::priv_insert_dispatch(boost::interprocess::detail::vector_iterator<typename
A::pointer>, InIt, InIt, boost::interprocess::detail::false_) [with InIt =
boost::interprocess::constant_iterator<volatile int, int>, T = volatile
int, A = boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:994: instantiated from âvoid
boost::interprocess::vector<T,
A>::insert(boost::interprocess::detail::vector_iterator<typename
A::pointer>, InIt, InIt) [with InIt =
boost::interprocess::constant_iterator<volatile int, int>, T = volatile
int, A = boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:1005: instantiated from âvoid
boost::interprocess::vector<T,
A>::insert(boost::interprocess::detail::vector_iterator<typename
A::pointer>, typename A::size_type, const T&) [with T = volatile int, A =
boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:946: instantiated from
âboost::interprocess::detail::vector_iterator<typename A::pointer>
boost::interprocess::vector<T,
A>::insert(boost::interprocess::detail::vector_iterator<typename
A::pointer>, const T&) [with T = volatile int, A =
boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:857: instantiated from âvoid
boost::interprocess::vector<T, A>::push_back(const T&) [with T = volatile
int, A = boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
volint.cpp:37: instantiated from here
boost/interprocess/mem_algo/rbtree_best_fit.hpp:643: error: invalid
conversion from âvolatile void*â to âvoid*â
boost/interprocess/mem_algo/rbtree_best_fit.hpp:643: error: initializing
argument 2 of âstatic bool
boost::interprocess::detail::memory_algorithm_common<MemoryAlgorithm>::try_shrink(MemoryAlgorithm*,
void*, size_t, size_t, size_t&) [with MemoryAlgorithm =
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >]â
boost/interprocess/segment_manager.hpp:186: instantiated from
âstd::pair<T*, bool>
boost::interprocess::segment_manager_base<MemoryManager>::allocation_command(boost::interprocess::allocation_type,
size_t, size_t, size_t&, T*) [with T = volatile int, MemoryAlgorithm =
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >]â
boost/interprocess/allocators/allocator.hpp:178: instantiated from
âstd::pair<typename boost::interprocess::detail::pointer_to_other<typename
boost::interprocess::detail::pointer_to_other<typename
SegmentManager::void_pointer, const void>::type, T>::type, bool>
boost::interprocess::allocator<T,
SegmentManager>::allocation_command(boost::interprocess::allocation_type,
size_t, size_t, size_t&, const typename
boost::interprocess::detail::pointer_to_other<typename
boost::interprocess::detail::pointer_to_other<typename
SegmentManager::void_pointer, const void>::type, T>::type&) [with T =
volatile int, SegmentManager = boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >,
boost::interprocess::iset_index>]â
boost/interprocess/containers/vector.hpp:305: instantiated from
âstd::pair<typename A::pointer, bool>
boost::interprocess::detail::vector_alloc_holder<A>::allocation_command(boost::interprocess::allocation_type,
typename A::size_type, typename A::size_type, typename A::size_type&,
const typename A::pointer&,
boost::interprocess::detail::integral_constant<unsigned int, 2u>) [with A
= boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:277: instantiated from
âstd::pair<typename A::pointer, bool>
boost::interprocess::detail::vector_alloc_holder<A>::allocation_command(boost::interprocess::allocation_type,
typename A::size_type, typename A::size_type, typename A::size_type&,
const typename A::pointer&) [with A =
boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:1174: instantiated from âvoid
boost::interprocess::vector<T, A>::priv_range_insert(typename A::pointer,
FwdIt, FwdIt, std::forward_iterator_tag) [with FwdIt =
boost::interprocess::constant_iterator<volatile int, int>, T = volatile
int, A = boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:1772: instantiated from âvoid
boost::interprocess::vector<T,
A>::priv_insert_dispatch(boost::interprocess::detail::vector_iterator<typename
A::pointer>, InIt, InIt, boost::interprocess::detail::false_) [with InIt =
boost::interprocess::constant_iterator<volatile int, int>, T = volatile
int, A = boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:994: instantiated from âvoid
boost::interprocess::vector<T,
A>::insert(boost::interprocess::detail::vector_iterator<typename
A::pointer>, InIt, InIt) [with InIt =
boost::interprocess::constant_iterator<volatile int, int>, T = volatile
int, A = boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:1005: instantiated from âvoid
boost::interprocess::vector<T,
A>::insert(boost::interprocess::detail::vector_iterator<typename
A::pointer>, typename A::size_type, const T&) [with T = volatile int, A =
boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:946: instantiated from
âboost::interprocess::detail::vector_iterator<typename A::pointer>
boost::interprocess::vector<T,
A>::insert(boost::interprocess::detail::vector_iterator<typename
A::pointer>, const T&) [with T = volatile int, A =
boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
boost/interprocess/containers/vector.hpp:857: instantiated from âvoid
boost::interprocess::vector<T, A>::push_back(const T&) [with T = volatile
int, A = boost::interprocess::allocator<volatile int,
boost::interprocess::segment_manager<char,
boost::interprocess::rbtree_best_fit<boost::interprocess::mutex_family,
boost::interprocess::offset_ptr<void> >, boost::interprocess::iset_index>
>]â
volint.cpp:37: instantiated from here
boost/interprocess/mem_algo/rbtree_best_fit.hpp:647: error: invalid
conversion from âvolatile void*â to âvoid*â
boost/interprocess/mem_algo/rbtree_best_fit.hpp:647: error: initializing
argument 5 of âstd::pair<void*, bool>
boost::interprocess::rbtree_best_fit<MutexFamily,
VoidMutex>::priv_allocation_command(boost::interprocess::allocation_type,
size_t, size_t, size_t&, void*, size_t) [with MutexFamily =
boost::interprocess::mutex_family, VoidPointer =
boost::interprocess::offset_ptr<void>]â
make[2]: *** [CMakeFiles/volint.dir/volint.o] Error 1
make[1]: *** [CMakeFiles/volint.dir/all] Error 2
make: *** [all] Error 2
}}}
--
Ticket URL: <http://svn.boost.org/trac/boost/ticket/1634>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:49:57 UTC