Skip to content

Incorrect expansion of derive(Default) for enum with generic parameter #20166

Closed
@jdygert-spok

Description

@jdygert-spok

Expanding derive(Default) on an enum adds incorrect bounds to generic parameters.

rust-analyzer version: 0.4.2522-standalone (11d45c8 2025-07-02)

rustc version: rustc 1.88.0 (6b00bc388 2025-06-23)

editor or extension: VSCode 1.101.2, rust-lang.rust-analyzer 0.3.2519

code snippet to reproduce:

#[derive(Default)]
pub enum Maybe<T> {
    Yes(T),
    #[default]
    No,
}

rust-analyzer macro expansion output:

// Recursive expansion of Default macro
// =====================================

impl<T: core::default::Default> core::default::Default for Maybe<T> {
    fn default() -> Self {
        Maybe::No
    }
}

cargo-expand output:

#[automatically_derived]
impl<T> ::core::default::Default for Maybe<T> {
    #[inline]
    fn default() -> Maybe<T> {
        Self::No
    }
}

Metadata

Metadata

Labels

C-bugCategory: bug

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions