protocol UnavailableHoge { static var shared: Self { get } } extension UnavailableHoge { static var shared: Self { fatalError() } } @available(*, unavailable) struct Hoge: UnavailableHoge { }