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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
enum class NodeFlags : int {
    None               = 0,
    Let                = 1 << 0,
// ...
}

contextFlags &= ~flag;

// error C2675: unary '~': 'NodeFlags' does not define this operator or a conversion to a type acceptable to the predefined operator

Кому нужны такие гавно-компиляторы? которые даже не в состоянии привети четко прописанные типы?

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

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

  • А если в int сделать явный каст, то что будет? Мне кажется, что тут все правильно и логично. Ты же используешь enum class, а их используют, когда не хотят, чтобы питух оттуда случайно привёлся к инту, т.к. для них это запрещено законом стандартом.
    Ответить
    • ну я же четко сказал что enum типа int ... значит кастуй в инт если не знаешь что делать.
      Ответить
      • > значит кастуй в инт если не знаешь что делать

        В каком месте стандарта это написано? enum class -- это примерно как класс, внутри которого есть поле с int'ом.
        Ответить
        • так он на стандарт бухтит, как я понял
          ему не по нраву, что стандарт такое не разрешает
          Ответить
          • Странно, фича, введённая из-за жалоб на проблемы с неявными преобразованиями энумов, не разрешает неявные преобразования. Неожиданно.
            Ответить
        • class Derived : public Base. легко кастуется автоматом в Base. почему enum class XXX : int. не кастуется в int? что за особые условия. если бы я хотел что бы это был некастуемый класс то я бы не указывал int в наследовании.
          Ответить
          • > что за особые условия

            Ты public не написал, а в приватного предка нельзя кастовать.
            Ответить
            • а в скриптоговне можно занаследоваться от инта, кстати
              Ответить
              • Зачем? Зачем?

                Кстати, вопрос про LSP со звездочкой: int наследуется от float или float от int?
                Ответить
                  • А поинтер скорее всего это несколько чаров. Значит ли это, что поинтер наследуется от чара?

                    Кстати, никакой гарантии про соотношение размера инта и флота, в общем, нет.
                    Ответить
                  • Ну иммутабельный инт в качестве флоата вполне норм зайдёт, имхо.
                    Ответить
                    • ну такое.

                      Алгоритм -- псевдокот
                      a:T = 0.05
                      assert round(a * 2, digitsAfterDot=1) == 0.1

                      запустим его для T = float и для T = int
                      Упал LSP?
                      Ответить
                      • А LSP для дженериков вообще применим?

                        Он же про подстановку инстанса, а не типа?
                        Ответить
                        • обобщенное программирование лишь способ реализации полиморфизма, о котором говорит LSP

                          не хочешь генерики, давай без них

                          пусть есть

                          int extends float

                          a:int = 13
                          b:int = 2
                          assert a / b == 6

                          а если там флоат?

                          и наоборот

                          a:float = 0.05
                          assert round(a * 2, digitsAfterDot=1) == 0.1

                          а если там int?
                          Ответить
          • Барбара Лискоу просит передать комитетчикам, что их enum class -- говно
            Ответить
      • Не, ты сказал, что это класс, отдалённо похожий на энум, с интом внутри. Если хочешт просто энум, то пиши просто enum pitux : int { ... }
        Ответить
        • Один хрен часть операторов не заработает. Тлен и безысходность.
          Ответить
    • вот он же говорит "or a conversion to a type acceptable to the predefined operator" но там четко есть int
      Ответить

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

Где здесь C++, guest?!

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


    8