Про C++
Привет всем.
Полез в код Firebird (не напрягайтесь), чтобы посмотреть одну штуку.
Увидев код:
(Arg::Gds(isc_auth_datalength) <<Arg::Num(charSize) <<Arg::Num(RemotePassword::SRP_SALT_SIZE * 2) <<"salt").raise();
Завис, а потом долго не мог вспомнить — «… зачем я сюда пришел?». А, ну да, полотенце жеж.
Забавно осознавать что я подобные конструкции игнорировал раньше. Наверное срабатывал защитный механизм.
Не, не круто. Надо так:
Arg::Gds(isc_auth_datalength) <<Arg::Num(charSize) <<Arg::Num(RemotePassword::SRP_SALT_SIZE * 2) <<"salt" <<raise;
А еще круче:
Arg::Gds(isc_auth_datalength) <<Arg::Num(charSize) <<Arg::Num(RemotePassword::SRP_SALT_SIZE * 2) <<"salt" <<raise_me;
Где raise_me это манипулятор, который перемещает (не копирует) состояние сконструированного объекта в выкидываемый объект исключения.
Пошел искать дальше искать, где эта зараза приводит имя пользователя к верхнему регистру.