- 1
- 2
- 3
- 4
- 5
- 6
#define EXPECT_EQ(expected, actual) \
assert(expected == actual);
int main() {
EXPECT_EQ(std::array<char, 3>(), std::array<char, 3>());
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−18
#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>());
вот где кульный асерт
положим
std::array < char => false
3 > () => true
std::array < char => false же
3 > () => true же
Включайте подсветку синтаксиса!
Интуитивно понятно, что массив больше какого-то мелкого символа, а тройка больше джвух скобок, похожих на ноль.
Хотя, может тут сравнения над типами. std::array - функция над типом, она больше простого типа char; а кортеж из одного элемента 3 больше кортежа из нуля элементов ().