sizeof(T) returns an unsigned integer type. In the following addition -1 is therefore converted to this unsigned type (that is, it becomes a positive integer), before the two operands are added. The result may therefore differ from what the programmer expected or intended.
This is all standard C/C++ type conversion behavior. The compiler is nice enough to warn about it, rather than have a programmer fall into the signed/unsigned conversion trap and spend hours finding the root cause of their buggy code. The CUDA compiler may warn more frequently about these cases than other compilers, since it appears to alert on any sign change caused by a default integer conversion, rather than only those which can cause problems; in this case I do not see how the conversion will change the overall semantics of the assignment, but I may be overlooking something.
In general, mixing of signed and unsigned integers in expressions (including comparisons) should be avoided, as it often leads to unintended semantics that are the source of hard to find bugs. Been there, done that, got the t-shirt.