Цитата(Iron Bug @ 31.10.2010, 11:08)

с MSVC, то нельзя выносить реализацию шаблонного класса из его объявления (это баг MSVC, несовместимость со стандартами). то есть, в заголовочнике должен быть весь класс
Цитата(Алексей1153 @ 31.10.2010, 11:34)

так и оставил в заголовочнике весь шаблон
При чем здесь MSVC? Разделить реализацию и объявление шаблона можно только с использованием ключевого слова
export, которое ни один компилятор так и не реализовал. Поэтому для шаблонов подходит только
модель включения, т.е. в одном файле должны быть все объявления и определения шаблона. У
Вандевурда & Джосатиса это хорошо описано.
Цитата(daorus @ 31.10.2010, 11:55)

template<class, class> b; // шаблонный форвард
Тут ошибка, должно быть template<class, class>
class b;
Кстати, по поводу того зачем нужны форвард объявления хорошо описано в этой книге (
ссылка) (см. раздел 2.3)
--Добавлено чуть позже--------------------------------------------------------------------------
Этого вообще не понял
Цитата(Iron Bug @ 31.10.2010, 12:08)

всё объясняется проще: когда мелкософтовский компилер собирает модули, он считает, что если нет экземпляра шаблонного класса - то его описание можно просто выкинуть. это и есть баг компилера, его несоответствие стандарту. просто для MSVC нужно, чтобы либо инклюд был явно включен в файл, где шаблон будет использован, либо вот так вот, как ты описал, извратиться и заставить компилер учесть шаблонный класс методом создания фиктивного объекта.
Разберем по частям
Цитата
когда мелкософтовский компилер собирает модули, он считает, что если нет экземпляра шаблонного класса - то его описание можно просто выкинуть.
совершенно правильно считает
Цитата
просто для MSVC нужно, чтобы либо инклюд был явно включен в файл, где шаблон будет использован
а как вы собираетесь использовать класс, если в данном листе трансляции ничего про него не известно? Естественно нужно делать инклуд, и шаблоны тут не при чем
Цитата
либо вот так вот, как ты описал, извратиться и заставить компилер учесть шаблонный класс методом создания фиктивного объекта
какой еще фиктивный объект? Где вы его увидели? Там лишь форвард объявление шаблонного класса, никаких объектов не создается