Skip to content

Oibit3 #19644

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 3 commits into from
Closed

Oibit3 #19644

wants to merge 3 commits into from

Conversation

pcwalton
Copy link
Contributor

@pcwalton pcwalton commented Dec 8, 2014

No description provided.

This change makes the compiler no longer infer whether types (structures
and enumerations) implement the `Copy` trait (and thus are implicitly
copyable). Rather, you must implement `Copy` yourself via `impl Copy for
MyType {}`.

A new warning has been added, `missing_copy_implementations`, to warn
you if a non-generic public type has been added that could have
implemented `Copy` but didn't.

For convenience, you may *temporarily* opt out of this behavior by using
`#![feature(opt_out_copy)]`. Note though that this feature gate will never be
accepted and will be removed by the time that 1.0 is released, so you should
transition your code away from using it.

This breaks code like:

    #[deriving(Show)]
    struct Point2D {
        x: int,
        y: int,
    }

    fn main() {
        let mypoint = Point2D {
            x: 1,
            y: 1,
        };
        let otherpoint = mypoint;
        println!("{}{}", mypoint, otherpoint);
    }

Change this code to:

    #[deriving(Show)]
    struct Point2D {
        x: int,
        y: int,
    }

    impl Copy for Point2D {}

    fn main() {
        let mypoint = Point2D {
            x: 1,
            y: 1,
        };
        let otherpoint = mypoint;
        println!("{}{}", mypoint, otherpoint);
    }

This is the backwards-incompatible part of rust-lang#13231.

Part of RFC rust-lang#3.

[breaking-change]
…older

behavior temporarily. This feature will eventually transition to REJECTED.
@nikomatsakis
Copy link
Contributor

@pcwalton just realized that my "opt-out-types" feature has an obvious bug; it never checks for destructors, so it will be too permissive w/r/t Copy. d'oh. we can patch it later though.

@Gankra
Copy link
Contributor

Gankra commented Dec 9, 2014

RIP Oibit2 😭

@nikomatsakis
Copy link
Contributor

@pcwalton 👯

@alexcrichton
Copy link
Member

Awesome work @nikomatsakis and @pcwalton!

lnicola pushed a commit to lnicola/rust that referenced this pull request Apr 28, 2025
internal: Make predefined symbols `const` instead of `static`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants