c++ - 为什么这段代码不会产生编译错误?

标签 c++ templates visual-c++

template<class T>
void foo()
{
    M
}

除非我实例化它,否则 Visual C++ 不会告诉我上面的代码包含错误。这是为什么?

最佳答案

因为Visual C++出错了。它没有实现 two-phase lookup .它应该检查模板的语法是否正确,即使您没有实例化它,但它并没有这样做。

GCC doesn't accept it.并不是说这一定意味着它是不对的,但无论如何都有一个例子可以说明应该发生的事情。

关于c++ - 为什么这段代码不会产生编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11589766/

相关文章:

c++ - 如何在我的操作系统内核中启用 IRQ8?

python - 用字典列表中找到的名称替换字典中的键 PYTHON-FLASK

c++ - 是否可以从一个特定模板实例化的构造函数中删除关键字 "explicit"?

c++ - MSVC 和 G++ 之间奇怪的数学差异

C++显示在txt文件中找到的唯一日期及其相关价格

c++ - stb镜像写入问题

c++ - 在带有 CMake 的 visual studio 2017 中使用 boost asio tcp

c++ - 除了使 TMP 编译之外,::template 意味着什么

c++ - GCC 和 MSVC 之间 boost::asio::io_service 行为的差异:无法取消已发布的作业

c++ - 嵌套模板