常数“ f”表示的条件下的关联常数

时间:2019-01-04 07:33:29

标签: rust associated-const

我正在尝试使用关联的常量作为if表达式中的条件来初始化另一个常量。我认为这应该可行,因为我可以直接使用关联的常量来初始化其他常量,因此它适用于const上下文,并且if表达式不依赖于任何其他值。

trait C {
    const c: i32;
}

trait StaticAssert<T1: C, T2: C> {
    const canUseAssociatedConst: i32 = T1::c;
    const canCompareAssociatedConst: bool = T1::c == T2::c;

    const check: i32 = if T1::c == T2::c { 1 } else { 0 };
}

编译时,出现错误:

error[E0019]: constant contains unimplemented expression type
 --> src/lib.rs:9:24
  |
9 |     const check: i32 = if T1::c == T2::c { 1 } else { 0 };
  |                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

我不确定编译器要告诉我什么。我添加了i32后缀以强制这些文字实际上是i32值,以防止分支中不同类型的任何问题,但这也无济于事。

1 个答案:

答案 0 :(得分:5)

据我所知,if上下文中尚未支持const和其他对象。

但是,通常您可以按照以下方式实现类似的效果:

trait C {
    const c: i32;        
}

trait StaticAssert<T1:C, T2:C> {
    const canUseAssociatedConst: i32 = T1::c;
    const canCompareAssociatedConst: bool = T1::c == T2::c;

    const check: i32 = (T1::c == T2::c) as i32;
}