Быстрый для гуру: С++ 11 разрешает объявлять имена имен имен inline. Это кажется излишним для меня; вещи, объявленные в неназванном пространстве имен, уже используются так, как если бы они были объявлены в охватывающем пространстве имен.
Итак, мой вопрос: что значит сказать
inline namespace /*anonymous*/ {
// stuff
}
и как он отличается от традиционного
namespace /*anonymous*/ {
// stuff
}
что мы знаем и любим С++ 98? Может ли кто-нибудь привести пример другого поведения, когда используется inline?
РЕДАКТИРОВАТЬ: Просто пояснить, так как этот вопрос был отмечен как дубликат: я не спрашиваю об именах inline namespaces вообще. Я понимаю прецедент, и я думаю, что они здорово. Я специально спрашиваю, что значит объявлять неназванное пространство имен как inline. Поскольку неназванные пространства имен обязательно всегда являются локальными для TU, рациональное управление версиями символов, похоже, не применяется, поэтому мне интересно, что делает добавление inline.
В стороне, стандарт [7.3.1.1], касающийся неназванных пространств имен, говорит:
inlineпоявляется в том и только в том случае, если он отображается в определении имен без имени
но это кажется тавтологией для моих неязычных глаз адвокатов - "оно появляется в определении, если оно появляется в определении"! Что касается бонусных очков, может ли кто-нибудь объяснить, что на самом деле говорит этот бит стандартного?
РЕДАКТИРОВАТЬ: Кубби заявил о бонусной точке в комментариях:
стандарт говорит о том, что определение имени-имени-имен ведет себя так, как если бы оно было заменено на X, где
inlineпоявляется в X, если оно появляется в пространстве имен без имени -определение