перед шаблонной функцией в коде ниже? Уточню, что у этой функции нет специализаций.
template <class T>
inline
void fn(T){};
Не влияет
Кажется неявный inline есть только если шаблон определяется сразу. Здесь стоит точка с запятой, то есть, мне кажется, влияет.
Кажется там даже некомпилирующиййся код. =)
положим, что тело непустое (хотя, кажется, это не должно менять дело)
При наличии тела инлайн неявно
Да нет, компилирующийся Просто пустой statement
void f(){};? Точна с запятой после тела функции.
лишняя, поспешил и не заметил. Но на компиляцию это не должно влиять)
Это не ошибка, просто бесполезно
хм. И в правду gcc и clang это компилируют. А чем является одиночный ;? Это пустой definition statement? Обычный statement же не может быть в глобальном скоупе или классе.
Да, это empty-declaration statement: https://eel.is/c++draft/dcl.pre#11 Правда я не понимаю зачем он.
Разве что для макросов, но такое себе: #if COND # define FOO int foo #endif FOO;
Возможно, это упрощает грамматику. А ещё это может быть удобно для всяких макросов вроде DEFINE_FUNCTION(myfunction); чтобы пользователь не гадал, для каких макросов можно ставить ;, а для каких нельзя – просто ставит везде и не думает
Грамматику кажется что не упрощает так как это отдельная ветка, для обычного declaration требуется непустой список.
Или так писали сишники в восьмидесятых, что пришлось поддержать
А для чего после объявления структуры/класса точку с запятой писать?
Потому что дальше может идти имя переменной, а может не идти
Обсуждают сегодня