Anchorite, понятно только то, что про тип компилятору что-то непонятно.
В итоге разобрался, что да, к ошибке приводит именно опережающее объявление в духе:
template <typename Key, typename Value>
class QMap;
typedef QMap<int, int> MyClassMap;
int main() {
MyClassMap instance_;
return 0;
};
Для сравнения, VS 2008 эту ошибку диагностирует так:
error C2079: 'instance_' uses undefined class 'QMap<Key,Value>'
- по-моему, здесь всё понятно (для непонятливых по коду ошибки ещё и в MSDN всё подробно написано). А у Qt - извините, не очень.
Я не так чтобы очень привык объявлять шаблоны вперёд (особенно когда их за меня объявляют), а потом не давать реализацию или забывать включать заголовки. Поэтому для меня сообщение о том, что тип "какой-то неполный", недостаточно информативно. Дело привычки, наверное, но я бы предпочёл без таких привычек
PS. Отдельного вопроса заслуживает то, почему такое опережающее объявление вообще оказалось в каком-то стандартном qt-заголовке.