Это вопрос this. Я специально интересовался, если частичной специализации класса члена как это:Является ли законным выполнять частичную внутриклассическую специализацию класса шаблона-члена в производном классе
struct FooParent {
template <class>
struct Bar{ };
};
struct Foo: FooParent {
template <class T>
struct Bar<T*> {};
};
Я знаю, это может быть сделано внутри области видимости пространства имен:
template <class T>
struct Foo::Bar<T*>{ };
Но я также специально заинтересован в в классе частичная специализация на уровне производного класса.
Оба лязг и GCC жалуется, когда встреча бывший:
лязг утверждает, что существует явная специализация шаблона, который, очевидно, не происходит:
error: explicit specialization of 'Bar' in class scope
НКУ немного менее многословным здесь и говорит что специализация шаблона члена должна выполняться в области пространства имен, которая, очевидно, не относится к не производному классу.
error: specialization of 'template struct FooParent::Bar' must appear at namespace scope
Это gcc прямо здесь, в сообщении об ошибке?
Я думаю, [это] (http://eel.is/c++draft/temp.class.spec#5) правила на нем. Вы не можете определить первичный шаблон в производном классе, так что вы также не можете объявить частичную специализацию. - Частичная специализация шаблона шаблона класса может быть объявлена или переопределена в любой области пространства имен, в которой может быть определен соответствующий первичный шаблон_ – skypjack
@skypjack не так, как это есть **, позволяя ** специализацию области нежелательного пространства имен, не отказываясь от чего-либо - см. [справочный вопрос] (http://stackoverflow.com/questions/40656857/why-is-in-class-partial-specialization-well-formed) и обсуждение в комментариях ... –
Я понял, что это разрешено, таким образом все остальное запрещено. Вы говорите вместо этого, что это разрешено, но может быть что-то еще объявленное как разрешенное где-то в стандарте, верно? Поэтому вы хотите, чтобы явное правило запрещало это. Я правильно понял вашу цель? – skypjack