Первая часть вашего кода уже неверна. C ++ не поддерживает явную специализацию «вложенных» (элементов) шаблонов без явной специализации включающего шаблона.
В контексте вашего кода запрещается явная специализация метода шаблона method1
без явной специализации всего шаблона класса bar
.
Если ваша шаблонная функция члена member1
зависит от некоторых параметров, вы можете использовать перегрузку вместо специализации шаблона в качестве обходного пути. Но так как это не так, вам придется каким-то образом переделывать свои шаблоны. То, что вы делаете выше, опять же, незаконно в C ++.
Ошибки, которые вы получаете дальше, легко могут быть (и, скорее всего, есть) вызваны этой первоначальной проблемой.
P.S. Описание проблемы, которую вы разместили, подразумевает, что ваш код компилируется. То, что вы разместили, не должно компилироваться по причинам, описанным выше. Это говорит о том, что вы публикуете поддельный код. Разместите реальный код.