How can I implement a struct so that the following cast can be performed?

```
var a = new StatusedValue<double>(1, false);
var b = (StatusedValue<int>)a;

```

My implementation should behave similarly to `Nullable<T>`, which works fine. However, this code fails with `System.InvalidCastException`:

```
public struct StatusedValue<T>  where T : struct
{
    public StatusedValue(T value) : this(value, true)
    {

    }

    public StatusedValue(T value, bool isValid)
    {
        this.value = value;
        this.isValid = isValid;
    }

    private T value;
    private bool isValid;

    public static implicit operator StatusedValue<T>(T value)
    {
        return new StatusedValue<T>(value);
    }

    public static explicit operator T(StatusedValue<T> value)
    {
        return value.value;
    }
}

```

Result:

> 
> Unable to cast object of type 'StatusedValue`1[System.Double]' to type
>  'StatusedValue`1[System.Int32]'.
> 
> 
>