При использовании плагина vim YouCompleteMe для завершения кода на С++ я наткнулся на проблему. Использование вложенных классов шаблонов останавливает выполнение для правильной работы.
Рассмотрим следующий пример, чтобы воспроизвести поведение:
#include <vector>
template<class T>
class foo {
public:
void Init();
private:
struct bar {
int foobar;
};
bar one_bar;
std::vector<foo<T>::bar> some_bars;
};
template<class T>
void foo<T>::Init(){
one_bar.foobar = 0; // completion as expected
some_bars.at(0).foobar = 0; // no completion neither for "at" nor for "foobar"
}
Завершение кода для "some_bars" вообще не работает, пока "one_bar" ведет себя как ожидалось.
Как я могу завершить работу над этим кодом? Эта проблема связана с настройкой и должна действительно работать или это ошибка в YCM?
Моя система - debian jessie/sid, версия vim 7.4, последняя версия YCM от GitHub.
Изменить: В YCMs есть следующие проблемы: https://github.com/Valloric/YouCompleteMe/issues/243 https://github.com/Valloric/YouCompleteMe/issues/530
Кажется, это ошибка в clang, а не в YCM. Может кто-то подтвердить это?
Edit2: Я открыл еще одну проблему в отслеживателе проблем YCM. https://github.com/Valloric/YouCompleteMe/issues/1170
Цель состоит в том, чтобы получить больше информации о том, что именно ошибка в clang точно есть, и, наконец, сделать отчет об ошибке в трекер-проблеме.
Edit3: Я следовал предложенной процедуре от RedX и кормил свой код в clang, чтобы получить доработки. Clang не дает никаких предложений по обсуждаемым позициям в коде. Это явно является причиной того, почему YCM не делает предложений в vim, и это не имеет ничего общего с YCM или vim.
Отчет об ошибках в трекер-проблеме проблемы с кланом был подан: http://llvm.org/bugs/show_bug.cgi?id=20973