Про 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 это манипулятор, который перемещает (не копирует) состояние сконструированного объекта в выкидываемый объект исключения.

Пошел искать дальше искать, где эта зараза приводит имя пользователя к верхнему регистру.

Leave a Comment