Это говорит о том, что (например), если параметр имеет значение по умолчанию X, но вы указываете T, то семантика X не проверяется. Это важно, потому что X может не скомпилироваться (как говорится, потому что некоторый оператор не может быть определен на X).
, например
template <class T = int>
struct foo
{
static int bar(T x) { return x.size(); }
}
int main()
{
std::cout << foo<std::string>::bar("hello") << std::endl;
}
Это не вызывает ошибку, даже если .size () не определен для int. Это не вызывает ошибку, потому что параметр по умолчанию int фактически не используется.
Отвечая на ваш вопрос. Это не говорит о том, что это позволит сравнивать X, это говорит о том, что если вы используете T, то не имеет значения, можно ли сравнивать X, потому что вы не используете X.