Re: One more foolishness of the C++ Standard
Vladimir Grigoriev <vlad.moscow@mail.ru> wrote:
My example was
A{};
B: public A {};
A a;
B b = a;
If there is a constructor in the B class
explicit B( const A & )
then
B b = a;
will not be allowed.
But
B b(a);
will be.
Consider a class
template <typename T>
class Point : public std::pair<T, T>
{
T &x;
T &y;
template <typename U, typename V>
Point( const std::pair<U, V> & );
...
};
and try to write for it three operators
Point + Point;
Point + std::pair;
std::pair + Point
such a way that
std::pair + std::pair
will be impossible.
The point of marking a constructor explicit is so that it cannot be used =
to perform conversions unintentionally. You have a problem, but you rule =
out precisely the mechanism designed to solve this very problem. You are =
painting yourself into a corner.
--
With best wishes,
Igor Tandetnik
With sufficient thrust, pigs fly just fine. However, this is not =
necessarily a good idea. It is hard to be sure where they are going to =
land, and it could be dangerous sitting under them as they fly overhead. =
-- RFC 1925