An external library we are using contains the following explicit constructor:
class Chart {
public:
explicit Chart(Chart::Type type, Object *parent);
// ...
};
The compiler complains with the following warning:
chart.h: warning #2305: declaration of 'explicit' constructor
without a single argument is redundant
Is it binary compatible to just remove the explicit
keyword in chart.h without recompiling the library to avoid the warning? My feeling is that it's safe, since explicit
does not make sense in this case anyways. Can anyone confirm?
Your best bet by a country mile is to switch off that warning for the duration of that inclusion if you get my meaning. Don't hack the vendor code.
Using explicit
for multi-argument constructors makes perfect sense in C++11 onwards since it can be used to stop implicit brace initialisation. Futhermore the standard doesn't say that removing explicit
must preserve the layout of the class, so you must assume that removing explicit
could break binary compatibility. Also, dropping it could change the behaviour of contrived SFINAE patterns as that constructor could become re-available in certain circumstances. See http://en.cppreference.com/w/cpp/language/sfinae.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With