Generics Can';t使用大小泛型类型(E401)上函数内部的mem::size_创建常量

Generics Can';t使用大小泛型类型(E401)上函数内部的mem::size_创建常量,generics,rust,constants,sizeof,Generics,Rust,Constants,Sizeof,我有一个Rust程序,我一直在尝试使用const函数作为宏的替代,在编译时生成各种常量(到目前为止进展很顺利),但我遇到了一个障碍,下面的代码段无法编译,因为size\u of采用了一个通用参数,编译器说我不能使用函数签名中的一个: const fn\u IOC(目录:u32,代码:u8,编号:u8)->u32{ //使用外部函数的通用参数(E0401) 常量大小:usize=::core::mem::size_of::(); (dir您不应该将size声明为const。它应该只是一个常规的不可

我有一个Rust程序,我一直在尝试使用const函数作为宏的替代,在编译时生成各种常量(到目前为止进展很顺利),但我遇到了一个障碍,下面的代码段无法编译,因为
size\u of
采用了一个通用参数,编译器说我不能使用函数签名中的一个:

const fn\u IOC(目录:u32,代码:u8,编号:u8)->u32{
//使用外部函数的通用参数(E0401)
常量大小:usize=::core::mem::size_of::();

(dir您不应该将
size
声明为
const
。它应该只是一个常规的不可变变量:

let size=::core::mem::size_of::();

在这种情况下,你也许可以改进错误信息。啊,我想如果在单态化时已知该值,那么它将被算作
常数,但我想我只是误解了
常数fn
的工作原理。谢谢你。天哪,我已经想了一个月了,这只是一个奇怪的生锈边缘案例,我不明白。该编译器错误太可怕了!已打开一个问题以跟踪它: