"If constexpr" yanlış dalı neden derleniyor?
Bu kod derleme sırasında neden hata veriyor? " " Bilgim (ve ayrıca bu ) bloğun derlenmemesi gerektiğini if constexpr
söylüyor else
.
if constexpr (true) {
int a = 10;
} else {
int b = 10
}
Hata şudur:
error: expected ‘,’ or ‘;’ before ‘}’ token
Kullanılan derleyici: g ++ sürüm 7.5.0
Derleme sırasında -std=c++17
bayrak kullandım .
PS Eksik ';' kasıtlı, sadece else
derlenip derlenmediğini kontrol etmek için.
Yanıtlar
Burada 2 ayrı ama birbiriyle ilişkili konu var.
İlk olarak, if constexpr
bir şablon içinde bir dalı yalnızca koşullu olarak derleyecektir. Bir şablonun dışında, tüm dallar derlenecek ve iyi biçimlendirilmelidir.
İkinci olarak, bir şablonda bile, atılan bir dalın if constexpr
tüm olası örnekler için kötü biçimlendirilmesi mümkün değildir. Kodunuzda durum böyle değildir, çünkü:
int b = 10
her zaman biçimsizdir (eksiklik nedeniyle ;
).
Yani derleyici, derleme hatası vermekte haklıdır. Teknik olarak, eğer atılan dal tüm örnekler için kötü biçimlendirilmişse, derleyicinin bir derleyici hatası vermesi gerekmez , ancak kod yine de yanlıştır.