使用vim插件YouCompleteMe进行C++代码自动补全时,遇到了问题。使用嵌套的模板类会导致自动补全无法正常工作。
考虑以下示例以复现此行为:
#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,从GitHub安装了最新版本的YCM。
编辑: 在YCM的bug跟踪器中报告了类似的问题: https://github.com/Valloric/YouCompleteMe/issues/243 https://github.com/Valloric/YouCompleteMe/issues/530
看起来这是clang中的一个错误,而不是YCM中的错误。有人可以证实吗?
编辑2: 我在YCM问题跟踪器中开了另一个问题。 https://github.com/Valloric/YouCompleteMe/issues/1170
意图是获取关于clang中错误的更多信息,并最终在clang问题跟踪器中进行错误报告。
编辑3: 我按照RedX提出的建议步骤,在clang中输入了我的代码以获得完成。 对于代码中讨论的位置,Clang没有提供任何建议。 这显然是YCM无法在vim中提供建议的原因,与YCM或vim无关。
已在clang问题跟踪器中提交错误报告: http://llvm.org/bugs/show_bug.cgi?id=20973