Bu, this sorusundaki bir takiptir.Kontrol edilmiş koruyucu parametre paketleri, uzmanlık durumunda kötü biçimlendirilmiş programların sebebi midir?
#include <type_traits>
template<typename T, typename... P, typename U = std::enable_if_t<std::is_integral<T>::value>>
void f() { static_assert(sizeof...(P) == 0, "!"); }
int main() {
f<int>();
}
Bu derler ama [temp.res]/8 göre o, hiçbir teşhis gerekli kötü şekillendirilmiş değildir çünkü:
variadic şablonun her geçerli uzmanlaşma bir gerektiriyor
Aşağıdaki kodu düşünün Boş şablon parametre paketi
Şimdi biraz farklı bir örnek olarak düşünün:
Bu durumda, parametre paketinin boş olmadığı geçerli tam açık bir uzmanlık var.
Bu, kodun artık kötü biçimlendirilmemiş olduğunu söylemek için yeterli midir?
Not: Ben dönüş türü veya benzeri içinde std::enable_if_t
koyarak gibi alternatif yollar aramıyorum.
"static", "f" işlevinin özelleştirmesini ** geçersiz ** "sizeof ... (P)! = 0" durumunda yapar. Çok ilginç bir soru! –
@ W.F. Evet. Bağlantılı soru, ilk örnek için ayrıntıları içerir. Beğenmene sevindim. :-) – skypjack