【发布时间】:2017-11-02 16:04:20
【问题描述】:
我从 VS2017 工作中获得了这种奇怪的行为,赢得了 C++ 项目: 缺少智能 - 我只是输入没有警告的纯文本,它仍然可以编译:
整个文件中没有显示错误。但是,当我在此函数范围之外的任何地方尝试相同的操作时,一切都按预期工作:
问题出现在我的泛型函数实现中:
#pragma region Public API
template <typename Key, typename Value>
void BinarySearchTree<Key, Value> ::Put(Key key, Value val)
{
Node node = root_;
if(node.key == null)
sadadasd
affsa
dasds
dasdsad
asdsad
}
#pragma endregion
类定义如下:
template <typename Key, typename Value>
class BinarySearchTree {};
再一次,它是死寂的——根本没有红色/黄色。编译后的代码甚至可以运行。就好像那部分被注释掉了。
尝试重新加载VS,没有帮助
【问题讨论】:
-
您实际上是在代码中的任何位置实例化此模板吗?
-
@Ron 我可以把它放到 main 中,例如:
BinarySearchTree<int, int> bst;没有错误 -
模板代码中的错误会延迟到模板展开。当然,这从未发生过。
-
我不知道为什么每个人都将实例化带入其中。模板在实例化之前仍会检查语法错误,并进一步检查不依赖于模板参数的部分。这是一个 MSVC 错误,当它们完全支持两阶段查找时可能会得到修复。
-
如果有人想知道,大规模的反对票就是我。我对任何暗示这种行为是正确的人投了反对票(到目前为止,每个人都是如此)。
标签: c++ compilation visual-studio-2017 intellisense compiler-warnings