mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-08 09:38:26 +03:00
Rollup merge of #81485 - jackh726:atb-issues, r=Mark-Simulacrum
Add some tests for associated-type-bounds issues Closes #38917 Closes #40093 Closes #43475 Closes #63591 #47897 is likely closable too, but it needs an MCVE ~~#38917, #40093, #43475, #47897 all are mislabeled and shouldn't have the `F-associated-type-bounds` label~~ ~~#71685 is also mislabeled as commented on in that thread~~
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
// check-pass
|
||||
|
||||
use std::borrow::Borrow;
|
||||
|
||||
trait TNode: Sized {
|
||||
type ConcreteElement: TElement<ConcreteNode = Self>;
|
||||
}
|
||||
|
||||
trait TElement: Sized {
|
||||
type ConcreteNode: TNode<ConcreteElement = Self>;
|
||||
}
|
||||
|
||||
trait DomTraversal<N: TNode> {
|
||||
type BorrowElement: Borrow<N::ConcreteElement>;
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn recalc_style_at<E, D>()
|
||||
where
|
||||
E: TElement,
|
||||
D: DomTraversal<E::ConcreteNode>,
|
||||
{
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,14 @@
|
||||
// check-pass
|
||||
|
||||
pub trait Test {
|
||||
type Item;
|
||||
type Bundle: From<Self::Item>;
|
||||
}
|
||||
|
||||
fn fails<T>()
|
||||
where
|
||||
T: Test<Item = String>,
|
||||
{
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,10 @@
|
||||
// check-pass
|
||||
|
||||
trait Foo { type FooT: Foo; }
|
||||
impl Foo for () { type FooT = (); }
|
||||
trait Bar<T: Foo> { type BarT: Bar<T::FooT>; }
|
||||
impl Bar<()> for () { type BarT = (); }
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn test<C: Bar<()>>() { }
|
||||
fn main() { }
|
||||
@@ -0,0 +1,24 @@
|
||||
// check-pass
|
||||
|
||||
#![feature(associated_type_bounds)]
|
||||
#![feature(type_alias_impl_trait)]
|
||||
|
||||
fn main() {}
|
||||
|
||||
trait Bar { type Assoc; }
|
||||
|
||||
trait Thing {
|
||||
type Out;
|
||||
fn func() -> Self::Out;
|
||||
}
|
||||
|
||||
struct AssocIsCopy;
|
||||
impl Bar for AssocIsCopy { type Assoc = u8; }
|
||||
|
||||
impl Thing for AssocIsCopy {
|
||||
type Out = impl Bar<Assoc: Copy>;
|
||||
|
||||
fn func() -> Self::Out {
|
||||
AssocIsCopy
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user