2015-02-04 3 views
-1

Я удивлен, следуя поведение IntelliSense, почему:Почему Intellisense не работает для карты <int, T *>?

template<typename T> 
struct Bar { 
    std::map<int , int *> map; 
    std::map<int , T *> map2; 
    std::vector<int *> vec; 
    std::vector<T *> vec2; 

    T * doBar(void) 
    { 
     map./*displays everything*/ 
    --->map2./*displays only 4 members: at, swap and two operators*/ 
     vec./*displays everything*/ 
     vec2./*displays everything*/  
     return null; 
    } 
}; 

это ошибка? Или есть какая-то особая причина, показывающая только 4 члена, когда вторая - T/T *? Логика скажет мне, что нет причин скрывать методы, например, find или erase для любых типов, даже если они шаблоны second s.
Компиляция кода с не отображаемыми функциями не вызывает ошибок и, как представляется, работает правильно. Я использую Visual Studio 2012. (и уже удалены баз данных IntelliSense несколько раз)

EDIT: это действительно, кажется, VS2012 конкретной ошибки, только что подтвердил, что работает с VS2013

+2

Работает отлично в VS2013. Назовем это специфической ошибкой 2012 года. –

+0

@ HansPassant благодарит за эту информацию (на этот вопрос ответили), должен ли я удалить этот вопрос? – wondra

ответ

0

Вопрос, вероятно, что std::map<int , T *> здесь неизвестный тип. Может быть специализация. И из личного опыта специализации, как правило, путают Intellisense.

+0

Ну, хотя тип неизвестен, он должен быть гарантирован для поиска и т. Д., Для чего нужны универсальные контейнеры, не так ли? – wondra

+1

@wondra: компилятор Intellisense реализует основной язык, он не знает о библиотеках. – MSalters

Смежные вопросы