Qraizer: Если быстро, т.к. некогда лезть в Стандарт, то не должно скомпилиться. nullptr – это не указатель, это значение специального типа std::nullptr_t, причём единственное в нём, других не существует. Адресная арифметика с ним, вроде бы, не определена, вот в этом не уверен, не помню. Скорее всего, т.к. его равнопредпочтительно можно привести и к указателю, и к целому, а это сильно разные операции в адресной арифметике.
Добавлено
Если откастуешь к целому, то auto diff будет указателем и не скомпилится вторая строка. Кроме как nullptr откастуешь там к целому.
Если откасуешь к указателю, то UB ещё в первой строке, т.к. адресная арифметика не определена на масштабах, выходящих за рамки одного массива объектов. (Отдельный объект равносилен массиву из одного элемента.)
Добавлено
Подозреваю, что в строках 1 и 2 предполагаются разные касты. Не?