#pragma once
#include <stdexcept>
namespace a83 {
  void error_noname() { throw -1; }
  template <class T> void error(const T& msg) { throw std::logic_error(msg); }
  //! быстрый вариант без конструктора строки
  #define IFERROR(cond, msg) if (cond) { \
    throw std::logic_error(msg); \
  }
} // a83 ns
//! исполняет фунцию с учётом исключения
#define rethrow_exec(FUNC) \
try { \
  FUNC; \
} catch (...) { \
  if (auto err_ptr = std::current_exception(); err_ptr) { \
    std::rethrow_exception(err_ptr); \
  } \
}
