Implicit convertibility is defined in [conv]p3 as:
An expression e can be implicitly converted to a type T if and only if
the declaration T t=e; is well-formed, for some invented temporary
variable t.
The copy-initialization T t = e; requires either that the type of e is
the same as, or a derived class of T -- or, that T is movable, because a
temporary T is constructed on the rhs and moved (though elided) to the lhs.
So, the definition of `is_convertible` is consistent with the core
language definition of *implicitly convertible*. Also consider:
void foo(immovable) {}
foo(42); // error: immovable is not movable
Changing the trait would require additional checks to test whether or
not you can write code that relies on implicit conversions. Maybe there
should be another more atomic trait, but I think is_convertible is fine
for the purpose of checking whether or not we can write
T t = e;
foo(e);
and so on.