Как сделать компиляцию Visual Studio C ++ 2010 такой же, как gcc / g ++? (или наоборот) - PullRequest
6 голосов
/ 07 октября 2011

Скажем, у вас есть следующий простой файл main.cpp:

#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int main() {
    const string FILENAME = "foo.txt";
    ifstream somefile(FILENAME);
    populations.close();
    return 0;
}

Это прекрасно компилируется с помощью Visual Studio C ++ 2010.

Однако в системе на основе Linux, если я выполню make main и скомпилирую, мы получим ожидаемую ошибку, так как мы не вызвали c_str() для строковой константы, например:

ifstream somefile(FILENAME.c_str());

Как обычно известно и описано в этом SO потоке .

Как я могу заставить VS вести себя как gcc / g ++ и вызвать ошибку компиляции для кода выше? Или как я могу заставить gcc / g ++ вести себя как VS и скомпилировать вышеупомянутое без ошибок? (Это простой вопрос обновления моего компилятора gnu?)

(я не верю, что отключение расширений компилятора - это решение, так как я это сделал, и оно все равно компилируется без ошибок.)

Ответы [ 2 ]

6 голосов
/ 07 октября 2011

В этом случае Visual Studio работает корректно по отношению к стандарту C ++ 11 ( теперь работает и на g ++ ). Я не уверен, почему вы хотите это сделать, но вам, вероятно, придется редактировать заголовки MSVC (не рекомендуется и довольно радикально).

Странно то, что они не пишут это в своей документации . Можете ли вы проверить, какой конструктор на самом деле вызывается?

5 голосов
/ 07 октября 2011

Это доступно как часть более нового стандарта c ++.

Чтобы отключить, добавьте

  #define _HAS_CPP0X 0

вверху, прежде чем вы включите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...