2016-03-02 23 views
7

Czy to legalne C++?Czy parametr parametru szablonu szablonu może powodować zacienienie?

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

Szczęk (3.7.1) odrzuca, twierdząc, drugi T cienie pierwszy T. GCC wydaje się nie przejmować tym i myślę, że to rozsądne. Myślę, że jest to tylko liczba parametrów, które mają znaczenie w parametrze szablonu szablonu.

+0

dlaczego trzeba używać 'T' dwa razy? jeśli chcesz użyć 'T' w drugim szablonie, możesz napisać szablon' template > ' –

+1

@DavidHaim To nie jest obowiązkowe, ale kiedy pierwszy parametr ma być nadany drugiemu parametrowi, który jest szablon szablonu, ma sens użycie tej samej (lub przynajmniej podobnej) nazwy zagnieżdżonego parametru szablonu. Twoja sugestia jest interesująca, nigdy nie próbowałem określać domyślnego parametru szablonu szablonu. Co osiąga w porównaniu do klasy 'template >? – nodakai

+0

Zastanawiam się, jaka jest motywacja motywująca ludzi, którzy szukają i niszczą słowa znaczników w tytule wpisu ?? Czy mogą być równie entuzjastycznie zastępować 'NULL' na' nullptr'? – nodakai

Odpowiedz

7

nr [temp.local]/6:

szablonu parametr nie będzie redeclared swym zakresem (zagnieżdżonych zakresów).

+0

Hmm, zajęło mi trochę czasu, zanim zdałem sobie sprawę, że twój cytat jest rzeczywiście istotny w moim przypadku, ale z pewnością jest to "zakres zagnieżdżony". – nodakai

Powiązane problemy