Уникальность нескольких неназванных пространств имен в блоке переводаC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Уникальность нескольких неназванных пространств имен в блоке перевода

Сообщение Anonymous »

Недавно я наткнулся на этот ответ о том, что он объявил об этом классе в неназванном пространстве имен, и я был удивлен, что он действительно собирает и, кажется, работает с Кланг. Я думал, что каждый экземпляр неназванного пространства имен (также в пределах блока перевода) имеет уникальный идентификатор. Из всех других идентификаторов в блоке перевода

Поэтому я, естественно, предположил, что

Код: Выделить всё

namespace {
int x;
}
namespace {
int y;
}
< /code>
должен перевести на: < /p>
namespace unique1 {
int x;
}
namespace unique2 {
int y;
}
< /code>
Однако CppReerference утверждает, что < /p>

Уникальное имя уникально во всей программе, но в пределах единицы перевода в одном и том же определении имени именных именных именных имен. /> , который, по-видимому, противоречит стандарту. 
Я попытался собрать следующий пример с GCC-151 (не компилируется) и Clang-20.1 (компилированные и выходы ожидаемых результатов 42 
): https://godbolt.org/z/7as6bzxgwbr/>#include

namespace {
class AnonClass;
}

class A {
public:
void print() {
std::cout
Какой компилятор правильный? Должны ли оба неназванных пространства имен иметь одинаковый уникальный идентификатор или их следует считать разными?

Подробнее здесь: https://stackoverflow.com/questions/797 ... ation-unit
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»