Skip to content

min_specialization does not allow specializing on ~const trait bounds #95186

Closed

Description

@BGR360

Given the following code (playground):

#![feature(rustc_attrs)]
#![feature(min_specialization)]
#![feature(const_trait_impl)]

#[rustc_specialization_trait]
trait Specialize {}

trait Foo {}

impl<T> const Foo for T {}

impl<T> const Foo for T
where
    T: ~const Specialize
{}

The following error is produced:

error: cannot specialize on `Binder(~const TraitPredicate(<T as Specialize>, polarity:Positive), [])`
  --> src/main.rs:12:1
   |
12 | / impl<T> const Foo for T
13 | | where
14 | |     T: ~const Specialize
15 | | {}
   | |__^

What I expect is that the compilation succeeds, as it does without the const trait impl and corresponding ~const trait bound (playground):

#![feature(rustc_attrs)]
#![feature(min_specialization)]

#[rustc_specialization_trait]
trait Specialize {}

trait Foo {}

impl<T> Foo for T {}

impl<T> Foo for T
where
    T: Specialize
{}

@rustbot label +F-const_trait_impl +F-specialization +A-specialization +A-traits

Activity

  1. BGR360 commented on Mar 21, 2022

    @BGR360
    ContributorAuthor

    @rustbot label +requires-nightly

  2. added
    requires-nightlyThis issue requires a nightly compiler in some way. When possible, use a F-* label instead.
    on Mar 21, 2022
  3. BGR360 commented on Mar 22, 2022

    @BGR360
    ContributorAuthor

    @rustbot claim

  4. added a commit that references this issue on Mar 25, 2022
    946bf54
  5. added 2 commits that reference this issue on Nov 11, 2022
    cd30ccf
    24feb92
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

A-specializationArea: Trait impl specializationA-trait-systemArea: Trait systemC-bugCategory: This is a bug.F-const_trait_impl`#![feature(const_trait_impl)]`F-specialization`#![feature(specialization)]`requires-nightlyThis issue requires a nightly compiler in some way. When possible, use a F-* label instead.

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions