Разве C ++ не является полностью необязательным?

У меня есть класс, у которого был встроенный член, но позже я решил, что хочу удалить реализацию из заголовков, поэтому я переместил тело членов функции в файл cpp. Сначала я просто оставил подпись в заголовочном файле (небрежно меня), и программа не смогла правильно связать. Затем я исправил свой заголовок, и, конечно, все работает нормально.

Но не был ли встроенный полностью необязательным?

В коде:

Первый:

//Class.h
class MyClass
{
   void inline foo()
   {}
};

Далее изменено на (не будет ссылки):

//Class.h
class MyClass
{
   void inline foo();
};

//Class.cpp
void MyClass::foo()
{}

И тогда (нормально будет работать):

//Class.h
class MyClass
{
   void foo();
};

//Class.cpp
void MyClass::foo()
{}

Я подумал, что inline необязателен, и подумал, что смогу обойтись без предупреждения о своей небрежности, но не ожидал ошибки компоновки. Какую корректную / стандартную вещь должен делать компилятор в этом случае, заслужил ли я свою ошибку в соответствии со стандартом?

Ответы на вопрос(4)

Ваш ответ на вопрос