Несоответствие переопределения в clang между struct и int

Следующая программа не выдает ошибку при компиляции с помощью clang:

namespace X {
struct i {};
}

namespace Y {
using X::i;
struct i {};
}

int main() {}

Давайте использовать int вместо struct, тогда мы получим:

namespace X {
int i;
}

namespace Y {
using X::i;
int i;
}

int main() {}

Эта программа выдает ошибку переопределения при компиляции с помощью clang.

Единственная разница между программами заключается в типе используемой сущности (struct или int), но одна компилируется без ошибок, а другая выдает ошибку переопределения.

Это указывает на ошибку в Clang? Возможно, стандарт неоднозначен, что такое переопределение, когда речь идет об использовании-объявлений. Но не должен ли компилятор делать свою интерпретацию последовательно?

Программы можно скомпилировать здесь:

3

Решение

Как сказал Игорь Тандетник, он плохо сформирован из-за [basic.scope.declarative] / 4 и в clang есть ошибка.

Ошибка была подтверждена и исправлена. Увидеть: https://llvm.org/bugs/show_bug.cgi?id=24033

2

Другие решения


По вопросам рекламы [email protected]