# Error code E0476

The coerced type does not outlive the value being coerced to.

Example of erroneous code:

    #![allow(unused)]
    #![feature(coerce_unsized)]
    #![feature(unsize)]

    fn main() {
    use std::marker::Unsize;
    use std::ops::CoerceUnsized;

    // error: lifetime of the source pointer does not outlive lifetime bound of the
    //        object type
    impl<'a, 'b, T, S> CoerceUnsized<&'a T> for &'b S where S: Unsize<T> {}
    }

During a coercion, the "source pointer" (the coerced type) did not outlive the "object type" (value being coerced to). In the above example, `'b` is not a subtype of `'a`. This error can currently only be encountered with the unstable `CoerceUnsized` trait which allows custom coercions of unsized types behind a smart pointer to be implemented.