Кресты / Говнокод #23979 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
// OK
class foo {};
void foo();

// не ОК: error: 'void bar()' redeclared as different kind of symbol
namespace bar {}
void bar();

"Двойные стандарты"

Запостил: Elvenfighter Elvenfighter, (Updated )

Комментарии (5) RSS

  • занимательно.

    но если подумать - то и не удивительно. класс есть тип. имена типов и функций - используются в разных контекстах и лежат в компилере в разных списках. но имя нэймспэйса может использоватся во всех контекстах, почему компилер и жалуется на конфликт.
    Ответить
    • Семантика namespace очень похожа на семантику имени типа. Вне случаев когда имя неймспейса используется как <namespace>::<symbol> требуется явно использовать ключевое слово namespace:
      namespace bar {}
      using namespace bar;

      А вот имя функции подразумевает собой некое значение (адрес функции). И я не могу придумать случая, когда не можно было бы из контекста определить что есть bar -- неймспейс или функция.
      Ответить
      • > И я не могу придумать случая, когда не можно было бы из контекста определить что есть bar -- неймспейс или функция.

        аналогично. данной классике `::a::b::c::d() { }` это тоже не помогает.

        но как по мне тот же `typename` тоже излишен - но для чего-то же его ввели, и требуют.
        Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8