#![feature(generic_associated_types)]
#![allow(unused)]

pub trait Trait  {
    type Assoc<'a> where Self: 'a;

    fn f(&self) -> Self::Assoc<'_>;

    // Disallow elision in return position, for now
    fn g(&self) -> Self::Assoc;
    //~^ ERROR missing generics for associated type `Trait::Assoc`
}

pub struct Struct {
    item: f32
}

pub struct GenericStruct<'a> {
    ref_item: &'a f32
}

impl Trait for Struct {
    type Assoc<'a> = GenericStruct<'a>;

    fn f(&self) -> Self::Assoc<'_> {
        Self::Assoc {
            ref_item: &self.item
        }
    }

    // Disallow elision in return position, for now
    fn g(&self) -> Self::Assoc {
    //~^ ERROR missing generics for associated type `Trait::Assoc`
        todo!()
    }
}

fn main() {}
