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

    −18

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    #define EXPECT_EQ(expected, actual) \
        assert(expected == actual); 
    
    int main() {
        EXPECT_EQ(std::array<char, 3>(), std::array<char, 3>());
    }

    Макрошаблоно-проблемы. Inspired by gtest

    Спойлер:
    error: macro "EXPECT_EQ" passed 4 arguments, but takes just 2
    EXPECT_EQ(std::array<char, 3>(), std::array<char, 3>());

    Запостил: Elvenfighter, 05 Апреля 2017

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

    • это не ассерт - это гавно!

      вот где кульный асерт

      #ifndef C_ASSERT
      #define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
      #endif
      
      C_ASSERT( -1 == static_cast<int>(0xffffffff) );
      Ответить
    • нет ничего смешнее и печальнее макропроблем в плюсах
      положим

      std::array < char => false
      3 > () => true
      std::array < char => false же
      3 > () => true же
      Ответить
      • Не сразу распарсил. Долго и упорно читал как std::array < char =>.
        Включайте подсветку синтаксиса!
        Ответить
        • Помоги мне распарсить.
          Ответить
          • std::array  <  char         =>    false
            3  >  ()                    =>    true
            std::array  <  char         =>    false же
            3  >  ()                    =>    true же
            Ответить
            • Спс. А это разве валидные сравнения?
              Ответить
              • По теореме профессора Кашицына - валидные.
                Интуитивно понятно, что массив больше какого-то мелкого символа, а тройка больше джвух скобок, похожих на ноль.
                Хотя, может тут сравнения над типами. std::array - функция над типом, она больше простого типа char; а кортеж из одного элемента 3 больше кортежа из нуля элементов ().
                Ответить
      • зато bormand < 3 == true
        Ответить
    • Пофиксил:
      EXPECT_EQ(((((((((((std)::)array)<)char), 3)>))()), ((((((((std)::)array)<)char), 3)>)())));
      Ответить

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