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



Reply via email to