Próbuję w większym stopniu uchwycić składnię i semantykę szablonów, wyobrażając sobie konstrukcje arcane. Wierzę, że po składnia nie jest dozwolone przez standard C++ 11:Gdzie w standardzie C++ 11 zabrania 'szablonu <typename T> klasy A {...}; szablon <typename T> klasa A <int> {...}; ' (jeśli gdziekolwiek)?
template <typename T>
class A
{...};
// phony "specialization"
template <typename T>
class A<int>
{...};
Jednak nie mogę znaleźć w standardzie C++ 11, gdzie ta składnia jest niedozwolone.
Czy mam rację, że pokazana składnia jest zabroniona przez standard C++ 11? Jeśli tak, to gdzie można stwierdzić, że składnia jest niedozwolona?
To jest błąd, który otrzymujesz z clang ++: "błąd: częściowa specjalizacja" A "nie używa żadnego z parametrów szablonu". Sądzę więc, że musisz przeszukać sekcję specjalizacji częściowej, związaną z użyciem jej parametrów szablonu. PS: g ++ mówi "błąd: parametry szablonu nie są dedukowalne w częściowej specjalizacji:" – vsoftco
@vsoftco Załóżmy, że masz "szablon klasa A {T t; }; ' –
@Yakk być może odpowiedź brzmi, że jest to spowodowane faktem, że jest logicznie niemożliwe, aby konstrukt miał sens, że jest niedozwolony, lub fakt, że nie jest nigdzie opisywany jako * dozwolony * konstrukt, który sprawia, że jest niedozwolony, zamiast tego jest nigdzie zabronione. –