Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to implement a trait for any mutability?

Can mutability be a generic parameter in traits? I'd like to implement a trait for a mutable and an immutable variant of a type without having to copy&paste the impl block.

trait Foo<T> {…}

impl<T> Foo for *const T {…}
impl<T> Foo for *mut T {…same thing again…}

Wishful pseudocode:

trait Foo<T> {…}

impl<T, Mutability> Foo for *Mutability T {…}
like image 573
Kornel Avatar asked Feb 07 '15 22:02

Kornel


1 Answers

Can mutability be a generic parameter in traits?

No. ^_^

Here's some detailed discussion on the matter (Internals, Reddit).

I think in general people recognize that the current state is not ideal, but that it's not terribly constraining at the moment, either. There's concerns on exactly how it would be implemented and the soundness of various approaches. Some people wonder if Higher-Kinded Types (HKTs) would solve the problem, if and when they are added to Rust.

See also:

  • How to avoid writing duplicate accessor functions for mutable and immutable references in Rust?
like image 106
Shepmaster Avatar answered Nov 17 '22 00:11

Shepmaster