ジェネリック関数の返り値

以下のコードはコンパイルが通りません。doubleはstructですし、ifの中はTがdoubleの時しか絶対に実行されないので良さそうなものですが、ダメです。

T Hoge<T>() where T : struct
{
    if(typeof(T) == typeof(double))
    {
        double r2 = 1.41421;
        return r2;
    }
    else
    {
        return default(T);
    }
}

キャストしてもダメです。キャストでエラーが出ます。

T Hoge<T>() where T : struct
{
    if(typeof(T) == typeof(double))
    {
        double r2 = 1.41421;
        return (T)r2;
    }
    else
    {
        return default(T);
    }
}


一度objectを経由させるとうまくいきます。

T Hoge<T>() where T : struct
{
    if(typeof(T) == typeof(double))
    {
        double r2 = 1.41421;
        return (T)(object)r2;
    }
    else
    {
        return default(T);
    }
}