Bu, hem standardın metni hem de yorumlarda belirtildiği gibi birkaç önemli uygulama tarafından, ancak tamamen ilgisiz nedenlerle izin verilmez.
İlk olarak, "kitaba göre" nedeni: nesnelleştirilmesi noktası A<C>olduğunu standardına göre, hemen tanımına önceB ve nesnelleştirilmesi noktası std::is_default_constructible<C>olduğunu hemen önce geçerli:
Bir sınıf şablonu uzmanlığı için, [...] uzmanlık başka bir şablon uzmanlığından başvurulduğu için dolaylı olarak somutlaştırılırsa, uzmanlığa atıfta bulunulan bağlam bir şablon parametresine bağlıysa ve uzmanlık daha önce somutlaştırılmamışsa çevreleme şablonunun somutlaştırılması için, somutlaştırma noktası, mahfaza şablonunun somutlaştırılmasından hemen önce olmaktadır. Aksi takdirde, böyle bir uzmanlık için örnekleme noktası, uzmanlaşmayı ifade eden ad alanı kapsamı bildiriminden veya tanımından hemen önce gelir.
Yana Cbu noktada açıkça eksiktir, nesnelleştirilme davranışı std::is_default_constructible<C>tanımsızdır. Ancak, bu kuralı değiştirecek olan 287 numaralı temel meseleye bakınız .
Gerçekte, bunun NSDMI ile ilgisi vardır.
- NSDMI'ler, ayrıştırmayı geciktirdikleri için gariptir - ya da standart olarak "tam sınıf bir bağlam" dır.
- Bu nedenle,
= 0ilke olarak Bhenüz bildirilmemiş şeylere atıfta bulunabilir , bu yüzden uygulama bitene kadar gerçekten ayrıştırmayı deneyemez B.
- Bir sınıfın tamamlanması, bildirilmiş bir kurucuya sahip olmadığından özel üye işlevlerinin, özellikle de varsayılan kurucunun örtülü olarak bildirilmesini gerektirir
C.
- Bu bildirimin bazı bölümleri (sürekli, önemsiz) NSDMI'nın özelliklerine bağlıdır.
- Bu nedenle, derleyici NSDMI'yi ayrıştıramazsa, sınıfı tamamlayamaz.
- Sonuç olarak, somutlaştığı noktada bunun eksik
A<C>olduğunu düşünür C.
Gecikmiş ayrışmış bölgelerle ilgilenen bu alan, beraberinde uygulama ayrışması ile birlikte yetersiz bir şekilde daha az belirtilmiştir. Temizlenmesi biraz zaman alabilir.