// Copyright 2016 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(rustc_attrs)] #![allow(unused)] struct SemiPriv; mod m1 { struct Priv; impl ::SemiPriv { pub fn f(_: Priv) {} //~ WARN private type in public interface //~^ WARNING hard error } impl Priv { pub fn f(_: Priv) {} // ok } } mod m2 { struct Priv; impl ::std::ops::Deref for ::SemiPriv { type Target = Priv; //~ WARN private type in public interface //~^ WARNING hard error fn deref(&self) -> &Self::Target { unimplemented!() } } impl ::std::ops::Deref for Priv { type Target = Priv; // ok fn deref(&self) -> &Self::Target { unimplemented!() } } } trait SemiPrivTrait { type Assoc; } mod m3 { struct Priv; impl ::SemiPrivTrait for () { type Assoc = Priv; //~ WARN private type in public interface //~^ WARNING hard error } } #[rustc_error] fn main() {} //~ ERROR compilation successful