Skip to content

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

Closed
@BGR360

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

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.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions