Self is the type being implemented, so it's Struct<T>. The method Struct<T>::new() takes a value of type T, which is a generic parameter, so whoever uses the type can choose it. So it doesn't make sense to call it with a value of type StructB – what if someone calls Struct::<NotStructB>::a(), what should happen, then?