// Copyright 2015 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 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. #![feature(specialization)] // Make sure we can't project defaulted associated types trait Foo { type Assoc; } impl Foo for T { default type Assoc = (); } impl Foo for u8 { type Assoc = String; } fn generic() -> ::Assoc { // `T` could be some downstream crate type that specializes (or, // for that matter, `u8`). () //~ ERROR E0308 } fn monomorphic() -> () { // Even though we know that `()` is not specialized in a // downstream crate, typeck refuses to project here. generic::<()>() //~ ERROR E0308 } fn main() { // No error here, we CAN project from `u8`, as there is no `default` // in that impl. let s: String = generic::(); println!("{}", s); // bad news if this all compiles }