swiftlang/swift

Bad diagnostic about memberwise `init` not being public

Open

#78,362 opened on Dec 24, 2024

View on GitHub
 (21 comments) (0 reactions) (1 assignee)Swift (10,719 forks)batch import
access controlcompilerconformancesdiagnostics qualityfix-itsgood first issuememberwise initswift 6.2type checker

Repository metrics

Stars
 (69,989 stars)
PR merge metrics
 (Avg merge 7d 12h) (530 merged PRs in 30d)

Description

Description

No response

Reproduction

public struct Number: RawRepresentable {
  public let rawValue: Int
}
398 | public struct Number: RawRepresentable {
    |               `- error: initializer 'init(rawValue:)' must be declared public because it matches a requirement in public protocol 'RawRepresentable' [witness_not_accessible_proto]
399 |   public let rawValue: Int
400 | }

Expected behavior

This diagnostic is not great:

  1. What initializer? (The implicit memberwise initializer).
  2. How do I or can I at all declare it public? (An implicit memberwise initializer cannot be public).
  3. What should I do to make this work? (Declare an explicit initializer + fix-it).

Environment

Swift version 6.2-dev (LLVM 1a588e5b044c46f, Swift 55189bae8e55169)

Additional information

No response

Contributor guide