当使用vim插件YouCompleteMe进行C++代码完成时,我偶然发现了一个问题.使用嵌套模板类可以使完成无法正常工作.
请考虑以下示例来重现行为:
#includetemplate class foo { public: void Init(); private: struct bar { int foobar; }; bar one_bar; std::vector ::bar> some_bars; }; template void foo ::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最新版本.
编辑:YCMs bug跟踪器中报告了类似的问题:https : //github.com/Valloric/YouCompleteMe/issues/243 https://github.com/Valloric/YouCompleteMe/issues/530
似乎是铿锵而不是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