My thoughts are something like:

Because it avoids several overloads of the same code and allows for polymorphism.Code:`template<typename DataT> bool inline InternalValidator(const DataT& Data) { return true; }`

template< typename DataT, typename StringT, typename Validator = &InternalValidator<DataT>, typename InputStream = std::basic_istream<StringT> >

class Input

{

public:

Input(const StringT& Question, const StringT& ErrorType, const StringT& ErrorValidation, Validator ValidatorFnc);

Input(const StringT& Question, const StringT& ErrorType);

Input(const StringT& Question);

Input();

Input& operator >> (DataT& rhs);

protected:

virtual bool Convert(const StringT& ConvertFrom, const DataT& ConvertTo);

StringT m_Data;

};

Potentially, the constructor asks and fetches the answer, as well as validated and loops until the answer is valid.

The answer is then converted and extracted through the >> operator.