This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: [PATCH] 77864 Fix noexcept conditions for map/set default constructors
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