1. C++ / Говнокод #23979

    +1

    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, 22 Марта 2018

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

    • Сунул свой двойной тебе в выхлопную трубу, проверь.
      Ответить
      • А зачем ты это сделал, g0_1494076596974?
        Ответить
    • занимательно.

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

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

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

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

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