Метод статического шаблона MSVS / MSVC не предупреждает - PullRequest
0 голосов
/ 16 ноября 2018

Некоторое время назад этот вопрос был задан относительно знакомого

error: 'static' can only be specified inside the class definition

ошибка.

В моем текущем сценарии использования я перехожу из очень MSVC-проекта, где почти весь код компилируется с использованием MSVC, и кросс-компиляции для Android.

Я заметил, что нет ошибки MSVC, и, что меньше всего, предупреждения о статических методах класса, имеющих определения внутри (вне) класса. Я что-то пропустил? Почему нет хотя бы предупреждения?


EDIT

Чтобы уточнить, я спрашиваю, почему нет надлежащего предупреждения MSVC / MSVS для такого кода (взято по ссылке выше):

class Foobar {
public:
  static void do_something();
};
static void Foobar::do_something() {} // Error!

int main() {
    Foobar::do_something();
}

EDIT

Так извините, каждый! Этот образец не работает! Мои извенения.

class Foobar {
public:
  template<class Y> 
  static int do_something();
};

template<class Y> 
static int Foobar::do_something() {return 1;} // Error!

int main() {
    return Foobar::do_something<double>();
}

Вот выходные данные MSVC 19.14 (успех) и GCC 4.12 (сбой).

1 Ответ

0 голосов
/ 16 ноября 2018

VS 2012 Обновление 5, VS 2013 Обновление 5, VS 2015 Обновление 3 и VS 2017 (обновление 15.9) - все сообщают об ошибке для этого кода:

error C2724: 'Foobar::do_something': 'static' should not be used
             on member functions defined at file scope

Я предполагаю, что код, созданный только сстарая, несовместимая версия Visual C ++.

Обратите внимание, что если вы хотите очистить код с помощью компилятора Visual C ++, чтобы упростить перенос на другие платформы:

Использование /permissive- уже подразумевает /Zc:strictStrings, /Zc:rvalueCast и /Zc:ternary и включает двапоиск по названию фазы .

  • Вы также можете использовать /Wall, хотя для того, чтобы увидеть полезные предупреждения, требуется некоторое усилие, чтобы уменьшить шум.Это все еще не так суетно, как clang, но это полезно.Пример множества вещей для подавления см. В верхней части этого заголовка .

  • Существует также экспериментальный препроцессор C99, который вы можете попробовать, хотя тотвсе еще находится на ранних стадиях.См. это сообщение в блоге

Вы можете попробовать это сами с помощью VS VS Community Edition.

...