Это просто ограничение тока или есть техническая причина? Поскольку общие функции скомпилированы в специализированный код, я не вижу, что должно помешать ему работать. Он также отлично работает в функции main
.Почему связанные константы не зависят от параметров типа?
Пример (playground):
#![feature(associated_consts)]
trait HasNumber<T> {
const Number: usize;
}
enum One {}
enum Two {}
enum Foo {}
impl<T> HasNumber<One> for T {
const Number: usize = 1;
}
impl<T> HasNumber<Two> for T {
const Number: usize = 2;
}
fn use_number<T, H: HasNumber<T>>() {
let a: [u8; H::Number] = unsafe { ::std::mem::uninitialized() };
}
fn main() {
let a: [u8; <Foo as HasNumber<One>>::Number] = unsafe { ::std::mem::uninitialized() };
println!("{}", <Foo as HasNumber<One>>::Number);
println!("{}", <Foo as HasNumber<Two>>::Number);
}
Ну, первое, что меня поражает, это то, что связанные consts определяют константу в части i.e 'HasNumber for Two', а не' HasNumber для T'. Однако я уже встречался с некоторыми ICE здесь, поэтому я думаю, что эта функция очень новая. –
Спасибо, что комментарий PR отвечает на мой вопрос. – Ferio