Saya telah memutuskan untuk membiarkan jawaban ini karena implementasi C dan C ++ biasanya terkait erat, tetapi pada kenyataannya tidak tunduk pada standar C seperti yang saya kira. Intinya tetap bahwa standar C ++ tidak menentukan apa yang terjadi untuk kasus seperti ini. Juga relevan bahwa representasi non-dua-komplemen sangat langka di dunia nyata, dan bahkan jika memang ada, mereka sering menyembunyikan perbedaan dalam banyak kasus daripada memaparkannya sebagai sesuatu yang dapat diharapkan dengan mudah ditemukan seseorang.
Perilaku nol negatif dalam representasi integer di mana mereka ada tidak didefinisikan secara ketat dalam standar C ++ seperti dalam standar C. Namun, ia mengutip standar C (ISO / IEC 9899: 1999) sebagai referensi normatif di tingkat atas [1.2].
Dalam standar C [6.2.6.2], nol negatif hanya dapat menjadi hasil dari operasi bitwise, atau operasi di mana sudah ada nol negatif (misalnya, mengalikan atau membagi nol negatif dengan nilai, atau menambahkan nol negatif ke nol) - menerapkan operator minus unary ke nilai nol normal, seperti dalam contoh Anda, oleh karena itu dijamin menghasilkan nol normal.
Bahkan dalam kasus yang dapat menghasilkan nol negatif, tidak ada jaminan bahwa mereka akan melakukannya, bahkan pada sistem yang mendukung nol negatif:
Tidak ditentukan apakah kasus ini benar-benar menghasilkan nol negatif atau nol normal, dan apakah nol negatif menjadi nol normal saat disimpan dalam suatu objek.
Oleh karena itu, kami dapat menyimpulkan: tidak, tidak ada cara yang dapat diandalkan untuk mendeteksi kasus ini. Bahkan jika bukan karena fakta bahwa representasi non-dua-komplemen sangat tidak umum dalam sistem komputer modern.
Standar C ++, pada bagiannya, tidak menyebutkan istilah "nol negatif", dan hanya memiliki sedikit diskusi tentang rincian besaran yang ditandatangani dan representasi pelengkap seseorang, kecuali untuk dicatat [3.9.1 para 7] bahwa mereka diperbolehkan.