bool operator>(const version_info& l, const version_info& r)
{
	return version_numbers_comparison_internal(l, r, GT) || (
		version_numbers_comparison_internal(l, r, EQUAL) && (
			(r.special_version().empty() && !l.special_version().empty()) ||
			(l.special_version() > r.special_version())
		)
	);
}
bool operator!=(const version_info& l, const version_info& r)
{
	return version_numbers_comparison_internal(l, r, NOT_EQUAL) || l.special_version() != r.special_version();
}
bool operator==(const version_info& l, const version_info& r)
{
	return version_numbers_comparison_internal(l, r, EQUAL) && l.special_version() == r.special_version();
}