error[E0277]: `T` cannot be shared between threads safely --> $DIR/phantom-auto-trait.rs:21:12 | LL | is_zen(x) | ------ ^ `T` cannot be shared between threads safely | | | required by a bound introduced by this call | note: required for `&T` to implement `Zen` --> $DIR/phantom-auto-trait.rs:10:24 | LL | unsafe impl<'a, T: 'a> Zen for &'a T where T: Sync {} | ^^^ ^^^^^ ---- unsatisfied trait bound introduced here = note: required because it appears within the type `PhantomData<&T>` note: required because it appears within the type `Guard<'_, T>` --> $DIR/phantom-auto-trait.rs:12:8 | LL | struct Guard<'a, T: 'a> { | ^^^^^ note: required by a bound in `is_zen` --> $DIR/phantom-auto-trait.rs:18:14 | LL | fn is_zen(_: T) {} | ^^^ required by this bound in `is_zen` help: consider restricting type parameter `T` | LL | fn not_sync(x: Guard) { | +++++++++++++++++++ error[E0277]: `T` cannot be shared between threads safely --> $DIR/phantom-auto-trait.rs:26:12 | LL | is_zen(x) | ------ ^ `T` cannot be shared between threads safely | | | required by a bound introduced by this call | note: required for `&T` to implement `Zen` --> $DIR/phantom-auto-trait.rs:10:24 | LL | unsafe impl<'a, T: 'a> Zen for &'a T where T: Sync {} | ^^^ ^^^^^ ---- unsatisfied trait bound introduced here = note: required because it appears within the type `PhantomData<&T>` note: required because it appears within the type `Guard<'_, T>` --> $DIR/phantom-auto-trait.rs:12:8 | LL | struct Guard<'a, T: 'a> { | ^^^^^ note: required because it appears within the type `Nested>` --> $DIR/phantom-auto-trait.rs:16:8 | LL | struct Nested(T); | ^^^^^^ note: required by a bound in `is_zen` --> $DIR/phantom-auto-trait.rs:18:14 | LL | fn is_zen(_: T) {} | ^^^ required by this bound in `is_zen` help: consider restricting type parameter `T` | LL | fn nested_not_sync(x: Nested>) { | +++++++++++++++++++ error: aborting due to 2 previous errors For more information about this error, try `rustc --explain E0277`.