Document disallowed explicit conversions between unrelated contract types.

This commit is contained in:
Daniel Kirchner 2018-11-06 14:33:53 +01:00
parent 88aee34c22
commit 8b2f8b1ea2

View File

@ -101,6 +101,14 @@ For most of the topics the compiler will provide suggestions.
``c.transfer(...)`` to ``address(c).transfer(...)``,
and ``c.balance`` to ``address(c).balance``.
* Explicit conversions between unrelated contract types are now disallowed. You can only
convert from a contract type to one of its base or ancestor types. If you are sure that
a contract is compatible with the contract type you want to convert to, although it does not
inherit from it, you can work around this by converting to ``address`` first.
Example: if ``A`` and ``B`` are contract types, ``B`` does not inherit from ``A`` and
``b`` is a contract of type ``B``, you can still convert ``b`` to type ``A`` using ``A(address(b))``.
Note that you still need to watch out for matching payable fallback functions, as explained below.
* The ``address`` type was split into ``address`` and ``address payable``,
where only ``address payable`` provides the ``transfer`` function. An
``address payable`` can be directly converted to an ``address``, but the