Методы класса, определённые прямо в объявлении класса, по умолчанию inline или нет?

Есть header-only класс, наподобие примера ниже, все методы класса, определённы прямо в объявлении класса.

class Class {
public:
    void foo() { /*some super cool code*/ }
};

ВОПРОС: Можно ли с уверенностью утверждать, что все методы такого класса по умолчанию рассматриваются как inline? И писать ключевое слове inline нет смысла?

P.S. Ну и да, я хорошо понимаю, что ключевое слово inline - это рекомендация компилятору, а не безусловное правило, на это счет не стоит распыляться в комментах. Суть вопроса выделена жирным.

Прошу внимательно прочитать ВОПРОС перед тем как ответить, и прошу по возможности ссылаться на источники вроде Черновик стандарта C++ и/или на авторитетную литературу. Спасибо!


Ответы (1 шт):

Автор решения: tim bars

Краткий ответ: да, методы определённые сразу при объявлении неявно являются inline

cppreference говорит, что

A function defined entirely inside a class/struct/union definition, whether it's a member function or a non-member friend function, is implicitly an inline function if it is attached to the global module (since C++20).

Перевод:

Функция, определённая полностью внутри определения class/struct/union, независимо от того, является ли она функцией-элементом или friend функцией, не являющейся элементом, неявно является встроенной функцией, если она присоединена к глобальному модулю (начиная с C++20).

Из черновика стандарта можете открыть:

  1. стр. 210 9.3.2:

A member function may be defined (8.4) in its class definition, in which case it is an inline member function

  1. стр. 238 первая строчка 11.3.7
→ Ссылка