Значение по умолчанию (даже с базовыми типами) должно быть «конструктором» по умолчанию:
template <class T> inline void SetDefault( T& value )
{
value = T();
}
Например, int-типы будут по умолчанию 0 (потому что явно инициализированы).
Это, очевидно, не будет работать с типами без значения по умолчанию, например с объектами класса, которые не имеют конструктора по умолчанию.