【问题标题】:How to force visual studio follow ISO C++如何强制 Visual Studio 遵循 ISO C++
【发布时间】: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' 声明不应该对派生类隐藏吗?
  • 您是否尝试使用选项/Za and /Zc 进行编译?
  • 您现在可以在 MSVS 中使用 Clang 作为编译器了。
  • 使用/Za会有不同的问题,比如Windows system headers not compiling

标签: c++ visual-studio templates gcc


【解决方案1】:

MS 最近似乎在这个方向上进行了工作:

https://blogs.msdn.microsoft.com/vcblog/2016/11/16/permissive-switch/

你可以试试看,或许能解决部分问题。

【讨论】:

    猜你喜欢
    • 2018-04-20
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多