Boost logo

Boost Users :

Subject: [Boost-users] [Boost][Container] Why is flat_set default constructor explicit?
From: dariomt_at_[hidden]
Date: 2017-08-17 15:02:48


Hi all,

I just found out that all Boost.Container default constructors are implicit
(just as I would expect) except for flat_set.

Quoting from [1]:
explicit flat_set() noexcept(/*snip*/);
Effects: Default constructs an empty container.

Why is flat_set different than the other containers?
Is this an oversight?

FWIW this issue is breaking my C++14 code (for both clang and gcc) when
switching from std::set to boost::container::flat_set, minimal repro
follows:

#include <boost/container/flat_set.hpp>
#include <set>

#ifndef USE_STD_SET
using S = boost::container::flat_set<int>;
#else
using S = std::set<int>;
#endif

struct A
{
    int i;
    S s;
};

int main()
{
    A a1; // OK
    A a2 {0, {{}} }; // OK

    A b1 {}; // FAILS
    A b2 {0}; // FAILS
    A b3 {0, {}}; // FAILS
}

A f()
{
    return {}; // FAILS
}

Using Bost 1.64.0 in case that matters.
Any help appreciated.

[1]
http://www.boost.org/doc/libs/1_64_0/doc/html/boost/container/flat_set.html#idp48556480-bb



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net