Разве 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 необязателен, и подумал, что смогу обойтись без предупреждения о своей небрежности, но не ожидал ошибки компоновки. Какую корректную / стандартную вещь должен делать компилятор в этом случае, заслужил ли я свою ошибку в соответствии со стандартом?