【发布时间】:2015-10-06 12:36:17
【问题描述】:
我很高兴在 Visual Studio 2013 中编写了 C++ 项目。我没有明确地使用任何非标准扩展,但是当我在 Ubuntu 中迁移到 GCC 4.8 时,我收到了很多错误,因为我隐式使用了非标准扩展。例如:
#include <vector>
template<class T>
class A
{
public:
using MyVector = std::vector<T>;
};
template<class T>
class B : public A<T>
{
MyVector vec;
};
此代码(这里是link)在VS2013的默认设置下是合法的,但在GCC中:error: 'MyVector' has not been defined,并且符合ISO。
所以我的问题是:如果我 100% 确定我的代码应该符合 ISO 标准,我可以强制 Visual Studio 严格遵循 ISO C++ 标准吗?
【问题讨论】:
-
你是用
-std=c++11编译的吗? -
除了你缺少一个';'在两个类声明的末尾,由于隐式私有作用域,'MyVector' 声明不应该对派生类隐藏吗?
-
您是否尝试使用选项
/Zaand/Zc进行编译? -
您现在可以在 MSVS 中使用 Clang 作为编译器了。
-
使用
/Za会有不同的问题,比如Windows system headers not compiling。
标签: c++ visual-studio templates gcc