[PATCH] 77864 Fix noexcept conditions for map/set default constructors

Tim Song t.canens.cpp@gmail.com
Mon Oct 10 21:01:00 GMT 2016


Trying again...with a few edits.

> On Mon, Oct 10, 2016 at 3:24 PM, François Dumont <frs.dumont@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]).

 _Rb_tree_impl() = default; doesn't do that; it default-initializes the
 comparator instead.

Tim



More information about the Libstdc++ mailing list