2016-03-02 32 views
7

Bu yasal C++ var mı?Şablon şablon parametresinin bir parametresi gölgelenmeye neden olabilir mi?

template <typename T, template <typename T> class> 
struct S { }; 

Clang (3.7.1), ikinci T gölgeleri ilk T şikayet reddeder. GCC bunu umursamıyor gibi görünüyor ve bence bu mantıklı. Sadece şablon şablonu parametresinde önemli olan parametre sayısı olduğunu düşünüyorum.

+0

Neden iki kere "T" kullanmanız gerekiyor? Eğer ikinci şablonda 'T' kullanmak isterseniz, 'template class>' –

+1

@DavidHaim yazabilirsiniz. Bu zorunlu değildir, ancak ilk parametre ikinci parametreye verilecekse şablon şablonu, iç içe geçmiş şablon parametresi için aynı (veya en az benzer bir) adı kullanmak mantıklıdır. Öneriniz ilginçtir, bir şablon şablonu parametresine varsayılan bir parametre belirtmeyi denemedim. Şablon sınıfı> 'ile karşılaştırıldığında neyi başardı? – nodakai

+0

Sonunda bir başlıkta etiket sözcüklerine karşı arama yapan ve yok eden kişilerin motivasyonunun ne olduğunu merak ediyorum. Belki de 'NULL' 'nullptr' yerine aynı derecede hevesli mi? – nodakai

cevap

7

sayılı [temp.local]/6:

(iç içe kapsamlar dahil olmak üzere) kapsam içinde redeclared eder bir şablon parametresi.

+0

Hmm, teklifinizin gerçekten benim durumumla alakalı olduğunu farketmem biraz zaman aldı, ama doğru, kesinlikle "iç içe alan" hakkında. – nodakai

İlgili konular