    forall(otype T)
    struct wrap
    {
        T val;
    };

    forall(otype T)
    T *? (wrap(T) rhs)
    {
        return rhs.val;
    }

    int main(int argc, char const *argv[])
    {
        wrap(int) test;
        test.val = 3;
        int i = *test;
        return 0;
    }
