キャストで型を書くのが面倒で仕方がないというあなたへ捧げるたった1つのクラス

template<class T>
struct auto_cast
{
    T v;
    auto_cast(T v_) : v(v_) { }
    template<class U>
    operator U() { return (U)v; }
};
template<class T>
auto_cast<T> cast(T v)
{
    return auto_cast<T>(v);
}
void func(short s) { }

void main()
{
    unsigned int n = cast(-1);
    func(cast(n));
}

え、型安全性?ナニソレ