The time function returns a value of type time_t, which is usually a signed integer. The srand function takes an unsigned integer as argument. This means that the signed integer has to be converted into an unsigned integer. Your compiler is warning you about this, but in this case there is no harm in doing this. If you want you could cast the integer to unsigned before passing it to srand.
C++ is a general purpose programming language based on the C programming language as described in ISO/IEC 9899:1999 Programming languages — C (hereinafter referred to as the C standard) - IS
> The change could break code that treats it is an alias for a integral type, C or C++.
Though changes brought about by C11 are irrelevant to C++, in theory C++ code that assumes that time_t is an integral type could be broken. C99, and consequently C++, have never insisted that time_t must be an integral type; time_t is "an Arithmetic type capable of representing times".
There is no error here: std::srand( std::time(nullptr) ) ;
Even if std::time_t is not an integral type, at most, there would be a warning about a narrowing conversion.
In contrast, this could well be (usually is) an ill-formed construct, which must be diagnosed: std::srand( { std::time(nullptr) } ) ; // *** error: narrowing conversion
That's strictly speaking correct, it is a warning rather than an error. However the distinction is more semantic/pedantic than really addressing the OP question especially when Microsoft make it clear - especially since it's their call.
> However the distinction is more semantic/pedantic
The distinction between an ill-formed programming construct and a well-formed one is semantic and/or syntactic; but it certainly is not pedantic.
> especially when Microsoft make it clear
To their credit, Microsoft has not even hinted that this is an erroneous construct. Their compiler merely warns about "possible loss of data"; MSDN adds that the conversion "may have" a problem due to implicit conversions.
> especially since it's their call.
It is not Microsoft's call. The International standard for C++ specifies that implicit conversions between arithmetic types is a feature of C++. Microsoft really has no choice in the matter.
Well done! It is very good if one has the ability to laugh at one's own stupidity; it would be even better if one profits by learning something from it when it is pointed out.