Буквально только что натолкнулся на забавную особенность языка C++, уже встречался с ней раньше, но каждый раз удивляет. Имеем вот такой код:
Компилятор объявление переменной интерпретирует как объявление функции, считая его эквивалентом вот этого:
void foo(uint32_t v) { ... CTimeout t(std::chrono::seconds(v)); ... }
CTimeout t(std::chrono::seconds v);Т.е. он просто решил, что скобки тут лишние и убрал их. Искать такую ошибку в большом проекте можно очень долго. К счастью компиляторы сейчас пошли умные и о таких ситуациях предупреждают (по крайней мере clang), хотя и компилируют. Но когда проект компилируется с парой сотен ворнингов, отыскать важный сложно. Выводу, я думаю очевидны.
а описание CTimeout покажи.
ОтветитьУдалитьЭто обычный класс: https://github.com/ReanGD/cpp-coroutine/blob/master/include/Timeout.h#L10
Удалить