MiddleДебаггингИногдаЕщё не отвечали
Почему сообщения об ошибках в шаблонах такие длинные и как их укротить?
Вызов std::sort на контейнере типа без operator< даёт такую диагностику. Объясните, почему она такая длинная и как сделать подобные сбои читаемыми.
In file included from /usr/include/c++/13/algorithm:61:
/usr/include/c++/13/bits/stl_algo.h:1820:5: required from '...__sort<...>'
/usr/include/c++/13/bits/stl_algo.h:1936:5: required from 'sort<...>'
app.cpp:14:15: required from here
/usr/include/c++/13/bits/predefined_ops.h:43:23: error:
no match for 'operator<' (operand types are 'Widget' and 'Widget')
43 | { return *__it1 < *__it2; }
| ~~~~~~~^~~~~~~~~
... 60 further 'required from' / 'note:' lines ...
Определите причину.
Ошибки рождаются глубоко в цепочке инстанциаций — компилятор печатает каждый шаг. Что помогает: C++20 концепты дают однострочное «не удовлетворяет X», ранний static_assert даёт понятное сообщение, и помогает cppinsights.io.
- ✗Читать ошибки сверху вниз вместо начала с вашей строки
- ✗Игнорировать
note:, объясняющие, почему substitution failed - ✗Городить ещё SFINAE вместо рефакторинга
- →Как концепты делают ошибки более понятными?
- →Что показывает
cppinsights.io?