Некоторое время назад этот вопрос был задан относительно знакомого
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 (сбой).