Ответ 1
Цель этого ограничения? Просто догадайтесь, но:
- вы можете использовать функцию члена класса шаблона/шаблона только в рамках функции включения. Поэтому вы уже знаете все используемые типы внутри функции и, следовательно, можете напрямую указывать используемые типы (для нескольких типов, конечно, вариант шаблона сохранил бы некоторую типизацию).
- хотя это может показаться не таким, это работа для всех создателей компилятора и место для ошибок, и поэтому это должно стоить усилий.
Fun Fact: попытайтесь использовать локальный класс внутри функции как возвращаемый тип для функции (С++ 0x) -lambda, объявленной в функции: MSVC 2010: ошибка внутреннего компилятора ^^.