суть в том, что inline функции подставляются. если вместо подстановки кода функции вызывать ее по адресу, то размер памяти для кода, который нужно оставить, известен на этапе компиляции. поэтому можно и определять non-inline функции в разных областях видимости. И компоновщик потом сам подставит нужный адрес. А если функцию нужно не вызвать, а подставить ее код, но сам код функции находится в другом месте, то что делать компилятору? А линковщик не занимается подстановкой кода, только адресов. В итоге кода нет, его размер не известен, вот компилятор и не сможет подставить код функции в место вызова. А если все делать в .h файлах, то в каждой единице трансляции будет определение inline функции
Да они где угодно могут писаться, но чтобы компилятор поставил тело, оно должно быть известно. Правда, это требование уже давно устарело, как и ключевое слово inline. Сейчас фактически оно болезненно
Обсуждают сегодня