Hi
I have run all tests with success. Even if it doesn't get rid of
_GLIBCXX_NOEXCEPT_IF it still limits it to one place.
So is it ok to commit ?
François
On 12/10/2016 22:36, François Dumont wrote:
On 10/10/2016 23:01, Tim Song wrote:
Trying again...with a few edits.
On Mon, Oct 10, 2016 at 3:24 PM, François Dumont <frs.dum...@gmail.com>
wrote:
@@ -602,24 +612,32 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct _Rb_tree_impl : public _Node_allocator
{
_Key_compare _M_key_compare;
- _Rb_tree_node_base _M_header;
+ _Rb_header_node _M_header;
+#if __cplusplus < 201103L
size_type _M_node_count; // Keeps track of size of tree.
+#else
+ size_type _M_node_count = 0; // Keeps track of size of tree.
+#endif
+#if __cplusplus < 201103L
_Rb_tree_impl()
- : _Node_allocator(), _M_key_compare(), _M_header(),
- _M_node_count(0)
- { _M_initialize(); }
+ : _M_node_count(0)
+ { }
+#else
+ _Rb_tree_impl() = default;
+#endif
The default constructor of the associative containers is required to
value-initialize the comparator (see their synopses in
[map/set/multimap/multiset.overview]).
I don't have latest Standard version so can't see the exact word but I
find quite annoying that the Standard doesn't allow this simple
implementation.
I don't know if unodered containers have same kind of requirements for
equal or hash functors but if so current implementation doesn't do
this value initialization.
So here is another attempt. This time it simply allows to have
noexcept condition in one place and closer to where operations are
being invoked.
Ok to commit after tests ?
François
_Rb_tree_impl() = default; doesn't do that; it default-initializes the
comparator instead.
Tim