Skip to content

Deriving Clone may silently fail for Arc #19034

Closed
@dtantsur

Description

@dtantsur

The example:

use std::sync;

trait Trait {}

struct DontCloneMe {
    pub value: int
}

impl Trait for DontCloneMe {}

#[deriving(Clone)]
struct CloneMe<T: Trait> {
    pub arc: sync::Arc<T>,
}

fn main() {
    let v = CloneMe {
        arc: sync::Arc::new(DontCloneMe { value: 0 })
    };

    v.clone();
}

Without Trait it would work as expected. With trait deriving seems to succeed, but compilation fails on calling clone:

demo.rs:21:7: 21:14 error: type `CloneMe<DontCloneMe>` does not implement any method in scope named `clone`
demo.rs:21     v.clone();
                 ^~~~~~~
error: aborting due to previous error

If this is invalid deriving (though I don't see reasons why), it should fail with some meaningful message.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions