← All posts tagged C++

ndtimofeev
C++

Правило SFINAE гласит: Если не получается рассчитать окончательные типы аргументов (провести подстановку шаблонных параметров) перегруженной шаблонной функции, компилятор не выбрасывает ошибку, а ищет другую подходящую перегрузку.
Правило существовало ещё в C++98, и было придумано, чтобы программа не выдавала ошибок, если где-то в заголовочных файлах оказался одноимённый шаблон, далёкий от контекста. Но впоследствии оно оказалось удобно для рефлексии при компиляции — в зависимости от свойств типа компиляция идёт по тому или другому пути.

ndtimofeev
C++

TIL en.cppreference.com А нахрена неквалифицированные перегруженные функции протекают из неймспейсов? С учётом того что перегруженные функции никак перегруженными не объявляются это выглядит как отстрел ноги, нет?

ndtimofeev

gist.github.com — Почему если в 48ой строке заменить явный захват указателя на сокет на & (захватывать всё по ссылке) всё 1) компилируется 2) но сегфолтится при любой попытке обратиться к переменной socket внутри лямбды? При этом, если определить socket вне лямбды вообще, то всё прекрасно захватывается по &.

ndtimofeev

Пришлось сесть за кресты впервые за последние года два. То ощущение когда внезапно на крестах проще городить абстракции и сложнее работать с данными чем в хаскеле.

ndtimofeev

Вообще говоря Qt5 и C++11 позволяют писать графические приложения сложнее hello world без наследования, объявления классов и вообще целиком в функции main. Это… хорошо.

ndtimofeev
C++

«…Звонит какой-то левый номер, и быдловатый голос «на ты», не представившись, начинает расспрашивать, как в крестах гарантировать корректность создания объекта на стеке…»

ndtimofeev

Раньше когда в основном приходилось писать код на крестах, я время от времени релаксировал тыкая что-нибудь наколенное на хаскеле. Теперь, когда основные задачи завязаны на хаскель, захотелось немного монотонных крестов.

ndtimofeev
C++

А Doxygen совсем-совсем не умеет c++11? А то лазить каждый раз в заголовки на предмет наличия constexpr-аттрибута очень утомительно. А ведь есть же ещё и finaly. И explicit у классов. И уж если пошла такая пьянка, есть enum class'ы которые как минимум надо выделять в документации, а по хорошему указывать от чего они унаследованы.

ndtimofeev
C++

Все попытки нагенерить строк constexpr'ами упираются в то что нужно из функции вернуть массив. И тут одно из двух: либо указывать длину получившейся строки в компил-тайме (что лишает нас возможности использовать ту же функцию повторно в рантайме), либо страдать. Это кстати вполне себе ответ на вопрос почему QString::number не constexpr.

ndtimofeev
C++

Есть шаблон:
template <char ... letters>
static char str[] = { letters ... };
С ним всё хорошо, он работает как надо. А вот все мои попытки написать шаблон для рекурсивного заполнения пакета шаблонных параметров упирается либо в проблемы линковки, либо в необходимость инициализации массива только строкой или списком инициализации. Весь день вчера с этим колупался. А ведь я всего-то хотел в компил-тайме развернуть int в строку.