Use REQUIRE when necessary to avoid undefined behavior
Add tests for assignment to supertype

The current code do works thanks to implicit conversion.