eb4d39e1fe
"Dual impls" are impls that are both type implementations and trait implementations. They can lead to ambiguity and so this patch removes them from the language. This also enforces coherence rules. Without this patch, records can implement traits not defined in the current crate. This patch fixes this, and updates all of rustc to adhere to the new enforcement. Most of this patch is fixing rustc to obey the coherence rules, which involves converting a bunch of records to structs.
24 lines
690 B
Rust
24 lines
690 B
Rust
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
|
|
// file at the top-level directory of this distribution and at
|
|
// http://rust-lang.org/COPYRIGHT.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
// option. This file may not be copied, modified, or distributed
|
|
// except according to those terms.
|
|
|
|
type Foo = @[u8];
|
|
|
|
impl Foo : Drop { //~ ERROR the Drop trait may only be implemented
|
|
//~^ ERROR cannot provide an extension implementation
|
|
fn finalize(&self) {
|
|
io::println("kaboom");
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
}
|
|
|
|
|