CS8121:'T' 类型的模式无法处理自定义 <T>

CS8121: Custom<T> cannot be handled by a pattern of type 'T'

考虑以下代码:

struct Custom<T> where T : struct { }
//...
Nullable<int> x = 2;
if(x is int z) { } //compiles
Custom<int> a = 2;
if(a is int b) { } //CS8121 An expression of type 'Custom<int>' cannot be handled by a pattern of type 'int'.

是什么让 Nullable<T> 能够处理 T 的模式?我可以为我的自定义结构做同样的事情吗?我已经尝试过转换运算符,但没有成功。不过不确定我是否尝试了所有可能的运算符。

What makes possible for Nullable<T> to handle a pattern of T?

一些编译器魔法。没有定义允许它工作的转换运算符(我已经测试过),只有编译器知道如何将模式匹配 Nullable<T>T.