namespace detail; и using detail::A;? (учитывая то, что в этом неймспейсе больше ничего нет)
по-моему разницы нет
О, это совсем разные вещи :)
Небольшой ликбез на тему разницы 1) using <name>; 2) using namespace <ns>; Первое называется using declaration, второе -- using-directive. using declaration, как можно догадаться из названия создает новую декларацию с именем <name>, в частности это объясняет почему если в текущем скоупе уже есть декларация с таким именем и она не overloadable (скажем, функция) будет ошибка компиляции. using directive работает хитрее, как уже кто-то писал, оно инжектит namespace <ns>, только не в текущий namespace а в общего предка текущего и <ns> namespace-ов. Это объясняет почему в решении https://t.me/ProCxx/324964 для случая когда исходный enum A живет в своем namespace bar нет ambig: мы либо находим bar::A либо идем в global namespace -- общего предка foo и bar. Для закрепления пример: https://gcc.godbolt.org/z/h0P2OB
Обсуждают сегодня