template での参照型と値型

気になったのでテスト

template<class T>
struct is_reference { static const bool value = false; };
template<class T>
struct is_reference<T&> { static const bool value = true; };

template<class T>
void Func(T value)
{
    ::printf("%s", is_reference<T>::value ? "参照型" : "値型");
}

enum EValue
{
    hoge,
};

void main()
{
    EValue value = hoge;
    EValue& value2 = value;
    Func(value2);
}
値型

まじっすか。明示的に書かないとダメっすか。
ちょっと明示的に書くを忘れてたらアウトですか。