fnc12/sqlite_orm

Use of recent sqlite_orm setting primary_key().autoincrement() does not compile

juandent opened this issue · 12 comments

This line of code gives an error (see below):

const auto rowExtractor = row_value_extractor<member_field_type_t<G>>();   // line 11035 in sqlite_orm

Gives this error:

Severity Code Description Project File Line Suppression State
Error C2672 'sqlite_orm::internal::row_value_extractor': no matching overloaded function found SeguroMedicoMFC >U:\C++\sqlite_orm\include\sqlite_orm\sqlite_orm.h 11035

Changes made were: update to a more recent of sqlite_orm, and updated separate autoincrement and primary_key constraints into a single constraint primary_key().autoincrement()

Code was:

			make_table("Specialties",
				make_column("id_specialty", &Specialty::id, .autoincrement(), primary_key()),
				make_column("name", &Specialty::name, collate_nocase())),

Now is:

			make_table("Specialties",
				make_column("id_specialty", &Specialty::id,primary_key().autoincrement()),
				make_column("name", &Specialty::name, collate_nocase())),

Everything was fine except when I moved the autoincrement() as a property of primary_key constraint!

Code was: (removed a typo in front of autoincrement)

make_table("Specialties",
				make_column("id_specialty", &Specialty::id, autoincrement(), primary_key()),
				make_column("name", &Specialty::name, collate_nocase())),
fnc12 commented

what code should I use to repro this bug?

fnc12 commented

I understand. But what you are compiling? You said that you changed only autoincrement API usage but before that you had something that you have compiled. Maybe it is tests target, maybe it is one of example or maybe it is you own code. I need to know cause I need a code to repro. On my side everything works fine

The code that shows the error is

       /**
        *  Function object for building an object from a result row.
        */
       template<class O>
       struct object_from_column_builder : object_from_column_builder_base {
           using object_type = O;

           object_type& object;

           object_from_column_builder(object_type& object_, sqlite3_stmt* stmt_) :
               object_from_column_builder_base{stmt_}, object(object_) {}

           template<class G, class S>
           void operator()(const column_field<G, S>& column) {
               const auto rowExtractor = row_value_extractor<member_field_type_t<G>>();
               auto value = rowExtractor.extract(this->stmt, this->index++);
               static_if<std::is_member_object_pointer<G>::value>(
                   [&value, &object = this->object](const auto& column) {
                       object.*column.member_pointer = std::move(value);
                   },
                   [&value, &object = this->object](const auto& column) {
                       (object.*column.setter)(std::move(value));
                   })(column);
           }
       };

The error is:

Error C2672 'sqlite_orm::internal::row_value_extractor': no matching overloaded function found SeguroMedicoMFC >U:\C++\sqlite_orm\include\sqlite_orm\sqlite_orm.h 11035

Error C2737 'rowExtractor': const object must be initialized SeguroMedicoMFC >U:\C++\sqlite_orm\include\sqlite_orm\sqlite_orm.h 11035

I am going to remove autoincrement() in the make_storage to see if that makes the code compile

removing autoincrement does not change the compiler status and the error remains the same!!

fnc12 commented

you are avoiding answering my question. Where is your make_storage call located?

This is my call to make_storage:

static auto storage =
	make_storage(db_name,
		make_table("Claims",
			make_column("id_claim", &Claim::id, primary_key().autoincrement()),
			make_column("fkey_patient", &Claim::fkey_patient),
			make_column("fkey_doctor", &Claim::fkey_doctor),
			make_column("fkey_medication", &Claim::fkey_medication),
			make_column("start_date", &Claim::start_date),
			make_column("submission_date", &Claim::submission_date),
			make_column("asprose_claim_number", &Claim::asprose_claim_number),
			make_column("asprose_case_number", &Claim::asprose_case_number),
			make_column("asprose_amount_presented", &Claim::asprose_amount_presented),
			make_column("ins_claim_number", &Claim::ins_claim_number),
			make_column("asprose_acknowledgement_type", &Claim::asprose_acknowledgement_type),
			make_column("comment", &Claim::comment),
			make_column("amount", &Claim::amount),
			make_column("other_system_id", &Claim::other_system_id),
			make_column( "status", &Claim::status),
			foreign_key(&Claim::fkey_doctor).references(&Doctor::id),
			foreign_key(&Claim::fkey_medication).references(&Medication::id),
			foreign_key(&Claim::fkey_patient).references(&Patient::id)),
		make_table("Patients",
			make_column("id_patient", &Patient::id, primary_key().autoincrement()),
			make_column("first_name", &Patient::first_name, collate_nocase()),
			make_column("last_name", &Patient::last_name, collate_nocase())),
		make_table("Doctors",
			make_column("id_doctor", &Doctor::id, primary_key().autoincrement()),
			make_column("first_name", &Doctor::first_name, collate_nocase()),
			make_column("last_name", &Doctor::last_name),
			make_column("fkey_specialty", &Doctor::fkey_specialty),
			foreign_key(&Doctor::fkey_specialty).references(&Specialty::id)),
		make_table("Specialties",
			make_column("id_specialty", &Specialty::id, primary_key().autoincrement()),
			make_column("name", &Specialty::name, collate_nocase())),
		make_table("Medications",
			make_column("id_medication", &Medication::id, primary_key().autoincrement()),
			make_column("name", &Medication::name, collate_nocase())),
		make_table("Invoices",
			make_column("id_invoice", &Invoice::id, primary_key().autoincrement()),
			make_column("fkey_claim", &Invoice::fkey_claim),
			make_column("number", &Invoice::number),
			make_column("amount", &Invoice::amount),
			make_column("type", &Invoice::type),
			make_column("description", &Invoice::description),
			make_column("fkey_INSResponse", &Invoice::fkey_INSResponse),
			foreign_key(&Invoice::fkey_claim).references(&Claim::id),
			foreign_key(&Invoice::fkey_INSResponse).references(&INSResponse::id)),
		make_table("INSResponses",
			make_column("id_INSResponse", &INSResponse::id, primary_key().autoincrement()),
			make_column("liquidacion_num", &INSResponse::liquidacion_num),
			make_column("numero_caso", &INSResponse::numero_caso),
			make_column("total_bruto", &INSResponse::total_bruto),
			make_column("otras_deducciones", &INSResponse::otras_deducciones),
			make_column("copagos", &INSResponse::copagos),
			make_column("coaseguros", &INSResponse::coaseguros),
			make_column("deducible_anual", &INSResponse::deducible_anual),
			make_column("total_neto", &INSResponse::total_neto),
			make_column("retencion", &INSResponse::retencion),
			make_column("total_a_pagar", &INSResponse::total_a_pagar),
			make_column("comentario", &INSResponse::comentarios),
			make_column("date_response", &INSResponse::date_response),
			make_column("tipo_cambio", &INSResponse::tipo_cambio)),
		make_table("INSResponseLine",
			make_column("id_INSResponseLine", &INSResponseLine::id, primary_key().autoincrement()),
			make_column("fkey_INSResponse", &INSResponseLine::fkey_INSResponse),
			make_column("fkey_factura", &INSResponseLine::fkey_factura),
			make_column("monto_cubierto", &INSResponseLine::monto_cubierto),
			make_column("deducciones", &INSResponseLine::deducciones),
			make_column("copago", &INSResponseLine::copago),
			make_column("coaseguros", &INSResponseLine::coaseguros),
			make_column("deducible_anual", &INSResponseLine::deducible_anual),
			make_column("total_rubro_factura", &INSResponseLine::total_rubro_factura),
			make_column("porcentaje_de_monto_cubierto", &INSResponseLine::porcentaje_de_monto_cubierto),
			make_column( "porcentaje_de_factura_cubierto", &INSResponseLine::porcentaje_de_factura_cubierto),
			foreign_key(&INSResponseLine::fkey_INSResponse).references(&INSResponse::id),
			foreign_key(&INSResponseLine::fkey_factura).references(&Invoice::id)));


if (flag == 0)
{
	flag = 1;
	storage.sync_schema(true);
}

The structures are:

#define VERSION_2

struct Claim
{
	int id;
	int fkey_patient;
	int fkey_doctor;
	int fkey_medication;					// for chronic meds
	std::chrono::sys_days start_date;
	std::chrono::sys_days submission_date;
	std::string asprose_claim_number;				// Claim: 85481
	std::string asprose_case_number;		// Case : 21INSENE0085
	double asprose_amount_presented;		// in colones
	std::string ins_claim_number;			// 202001017481-ACCSA0120094110
	int asprose_acknowledgement_type;		// full, partial, none: TODO: create an enum instead
	std::string comment;
	double amount;
	std::optional<int> other_system_id;
#ifdef VERSION_2
	int status;								// sent to asprose (true or false)
#endif

	std::string simple_dump() const
	{
		std::string str = std::to_string(id) + " - "s + Util::to_string(start_date) + " - "s + Util::to_string(submission_date) + " " + std::to_string(fkey_patient);
		return str;
	}

	std::string dump() const;

	double get_total_amount();
};


struct Patient
{
	int id;
	std::string first_name;
	std::string last_name;

	std::string name() const
	{
		return first_name + " "s + last_name;
	}
	std::string simple_dump() const
	{
		std::string str = std::to_string(id) + " - "s + first_name + " "s + last_name;
		return str;
	}
};

struct Doctor
{
	int id;
	std::string first_name;
	std::string last_name;
	int fkey_specialty;

	std::string name() const
	{
		return first_name + " "s + last_name;
	}
	std::string simple_dump() const
	{
		std::string str = std::to_string(id) + " - "s + first_name + " "s + last_name;
		return str;
	}
};

struct Specialty
{
	int id;
	std::string name;

	std::string simple_dump() const
	{
		std::string str = std::to_string(id) + " - "s + name;
		return str;
	}

};

struct Medication
{
	int id;
	std::string name;

	std::string simple_dump() const
	{
		std::string str = std::to_string(id) + " - "s + name;
		return str;
	}
};

enum class InvoiceType
{
	Appointment, Exam, Medication, Therapy, Procedure
};


struct Invoice
{
	int id;
	int fkey_claim;
	std::string number;
	double amount;
	int type;
	std::string description;
	std::optional<int> fkey_INSResponse;

	std::string simple_dump() const
	{
		std::string str = std::to_string(id) + " - "s + number + " "s + amountInColones();
		str += " "s + get_type();
		return str;
	}

	std::string amountInColones() const
	{
		Util::Colones col{amount};
		auto col_str = Util::to_string(col);
		return col_str;
	}
	
	std::string get_type() const
	{
		switch(static_cast<InvoiceType>(type))
		{
		case InvoiceType::Medication:
			return "Medicinas"s;
		case InvoiceType::Appointment:
			return "Consulta"s;
		case InvoiceType::Exam:
			return "Examenes"s;
		case InvoiceType::Procedure:
			return "Procedimiento"s;
		case InvoiceType::Therapy:
			return "Terapia";
		default:
			return "?"s;
		}
	}
};

struct INSResponse
{
	int id;
	std::string liquidacion_num;	// ACCSA0121008421
	long long numero_caso;				// 20200101
	double total_bruto;				// $291.47
	double otras_deducciones;		// 0.00
	double copagos;					// 0.00
	double coaseguros;				// $58.29
	double deducible_anual;			// 0.00
	double total_neto;				// CRC 142,134.87
	double retencion;				// 0.00
	double total_a_pagar;			// CRC 142,134.87
	std::string comentarios;		// deducible acumulado en su totalidad
	double tipo_cambio;				// 609.55
	std::chrono::sys_days date_response;

	std::string simple_dump() const
	{
		std::string str = std::to_string(id) + " - "s + liquidacion_num + " "s + amountInColones();
		return str;
	}
	std::string amountInColones() const
	{
		Util::Colones col{ total_a_pagar};
		auto col_str = Util::to_string(col);
		return col_str;
	}
};

struct INSResponseLine
{
	int id;
	int fkey_INSResponse;
	int fkey_factura;
	//int fkey_claim;							// fkey_factura->fkey_claim
	double monto_cubierto;
	double deducciones;
	double copago;
	double coaseguros;
	double deducible_anual;
	double total_rubro_factura;
	double porcentaje_de_monto_cubierto;	// total_rubro_factura/monto_cubierto
	double porcentaje_de_factura_cubierto;	// total_rubro_factura/fkey_factura->amount

	std::string simple_dump() const
	{
		std::string str = std::to_string(id) + " : "s + std::to_string(fkey_INSResponse) + " - "s + std::to_string(fkey_factura);
		return str;
	}
};

/////////////////////////////////////////////////////////////////
///
///

using namespace sqlite_orm;

using als_c = alias_c<Claim>;
using als_p = alias_p<Patient>;
using als_d = alias_d<Doctor>;
using als_s = alias_s<Specialty>;
using als_m = alias_m<Medication>;
using als_i = alias_i<Invoice>;
using als_j = alias_j<INSResponse>;
using als_k = alias_k<INSResponseLine>;
using als_l = alias_l<Claim>;
using als_q = alias_q<Invoice>;

is this what you wanted?

C:\Users\Juan Dent\C++ Development\Source Components\UtilitiesJD\MFC_Utilities\SeguroMedicoMFC\Data.cpp(71,14): message : see the first reference to 'sqlite_orm::internal::storage_t<sqlite_orm::internal::table_t<Claim,false,sqlite_orm::internal::column_t<int Claim::* ,sqlite_orm::internal::empty_setter,sqlite_orm::internal::primary_key_with_autoincrement<sqlite_orm::internal::primary_key_t<>>>,sqlite_orm::internal::column_t<int Claim::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<int Claim::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<int Claim::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<std::chrono::sys_days Claim::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<std::chrono::sys_days Claim::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<std::string Claim::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<std::string Claim::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<double Claim::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<std::string Claim::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<int Claim::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<std::string Claim::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<double Claim::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<std::optional<int> Claim::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<int Claim::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::foreign_key_t<std::tuple<int Claim::* >,std::tuple<int Doctor::* >>,sqlite_orm::internal::foreign_key_t<std::tuple<int Claim::* >,std::tuple<int Medication::* >>,sqlite_orm::internal::foreign_key_t<std::tuple<int Claim::* >,std::tuple<int Patient::* >>>,sqlite_orm::internal::table_t<Patient,false,sqlite_orm::internal::column_t<int Patient::* ,sqlite_orm::internal::empty_setter,sqlite_orm::internal::primary_key_with_autoincrement<sqlite_orm::internal::primary_key_t<>>>,sqlite_orm::internal::column_t<std::string Patient::* ,sqlite_orm::internal::empty_setter,sqlite_orm::internal::collate_constraint_t>,sqlite_orm::internal::column_t<std::string Patient::* ,sqlite_orm::internal::empty_setter,sqlite_orm::internal::collate_constraint_t>>,sqlite_orm::internal::table_t<Doctor,false,sqlite_orm::internal::column_t<int Doctor::* ,sqlite_orm::internal::empty_setter,sqlite_orm::internal::primary_key_with_autoincrement<sqlite_orm::internal::primary_key_t<>>>,sqlite_orm::internal::column_t<std::string Doctor::* ,sqlite_orm::internal::empty_setter,sqlite_orm::internal::collate_constraint_t>,sqlite_orm::internal::column_t<std::string Doctor::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<int Doctor::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::foreign_key_t<std::tuple<int Doctor::* >,std::tuple<int Specialty::* >>>,sqlite_orm::internal::table_t<Specialty,false,sqlite_orm::internal::column_t<int Specialty::* ,sqlite_orm::internal::empty_setter,sqlite_orm::internal::primary_key_with_autoincrement<sqlite_orm::internal::primary_key_t<>>>,sqlite_orm::internal::column_t<std::string Specialty::* ,sqlite_orm::internal::empty_setter,sqlite_orm::internal::collate_constraint_t>>,sqlite_orm::internal::table_t<Medication,false,sqlite_orm::internal::column_t<int Medication::* ,sqlite_orm::internal::empty_setter,sqlite_orm::internal::primary_key_with_autoincrement<sqlite_orm::internal::primary_key_t<>>>,sqlite_orm::internal::column_t<std::string Medication::* ,sqlite_orm::internal::empty_setter,sqlite_orm::internal::collate_constraint_t>>,sqlite_orm::internal::table_t<Invoice,false,sqlite_orm::internal::column_t<int Invoice::* ,sqlite_orm::internal::empty_setter,sqlite_orm::internal::primary_key_with_autoincrement<sqlite_orm::internal::primary_key_t<>>>,sqlite_orm::internal::column_t<int Invoice::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<std::string Invoice::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<double Invoice::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<int Invoice::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<std::string Invoice::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<std::optional<int> Invoice::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::foreign_key_t<std::tuple<int Invoice::* >,std::tuple<int Claim::* >>,sqlite_orm::internal::foreign_key_t<std::tuple<std::optional<int> Invoice::* >,std::tuple<int INSResponse::* >>>,sqlite_orm::internal::table_t<INSResponse,false,sqlite_orm::internal::column_t<int INSResponse::* ,sqlite_orm::internal::empty_setter,sqlite_orm::internal::primary_key_with_autoincrement<sqlite_orm::internal::primary_key_t<>>>,sqlite_orm::internal::column_t<std::string INSResponse::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<__int64 INSResponse::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<double INSResponse::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<double INSResponse::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<double INSResponse::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<double INSResponse::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<double INSResponse::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<double INSResponse::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<double INSResponse::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<double INSResponse::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<std::string INSResponse::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<std::chrono::sys_days INSResponse::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<double INSResponse::* ,sqlite_orm::internal::empty_setter>>,sqlite_orm::internal::table_t<INSResponseLine,false,sqlite_orm::internal::column_t<int INSResponseLine::* ,sqlite_orm::internal::empty_setter,sqlite_orm::internal::primary_key_with_autoincrement<sqlite_orm::internal::primary_key_t<>>>,sqlite_orm::internal::column_t<int INSResponseLine::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<int INSResponseLine::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<double INSResponseLine::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<double INSResponseLine::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<double INSResponseLine::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<double INSResponseLine::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<double INSResponseLine::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<double INSResponseLine::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<double INSResponseLine::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::column_t<double INSResponseLine::* ,sqlite_orm::internal::empty_setter>,sqlite_orm::internal::foreign_key_t<std::tuple<int INSResponseLine::* >,std::tuple<int INSResponse::* >>,sqlite_orm::internal::foreign_key_t<std::tuple<int INSResponseLine::* >,std::tuple<int Invoice::* >>>>::get_all' in 'Storage_Impl::copy_old_to_new'
3>U:\C++\sqlite_orm\include\sqlite_orm\sqlite_orm.h(11035,28): error C2737: 'rowExtractor': const object must be initialized
3>U:\C++\sqlite_orm\include\sqlite_orm\sqlite_orm.h(11036,30): error C3536: 'rowExtractor': cannot be used before it is initialized
3>U:\C++\sqlite_orm\include\sqlite_orm\sqlite_orm.h(11038,23): error C3536: 'value': cannot be used before it is initialized
3>U:\C++\sqlite_orm\include\sqlite_orm\sqlite_orm.h(11039,67): error C3493: 'value' cannot be implicitly captured because no default capture mode has been specified
3>U:\C++\sqlite_orm\include\sqlite_orm\sqlite_orm.h(11041,23): error C3536: 'value': cannot be used before it is initialized
3>U:\C++\sqlite_orm\include\sqlite_orm\sqlite_orm.h(11042,59): error C3493: 'value' cannot be implicitly captured because no default capture mode has been specified
3>U:\C++\sqlite_orm\include\sqlite_orm\sqlite_orm.h(11039,67): error C2065: 'value': undeclared identifier
3>U:\C++\sqlite_orm\include\sqlite_orm\sqlite_orm.h(11037,67): message : see reference to function template instantiation 'auto sqlite_orm::internal::object_from_column_builder<Claim>::()::<lambda_1>::operator ()<sqlite_orm::internal::column_field<G,S>>(const _T1 &) const' being compiled
3>        with
3>        [
3>            G=std::chrono::sys_days Claim::* ,
3>            S=sqlite_orm::internal::empty_setter,
3>            _T1=sqlite_orm::internal::column_field<std::chrono::time_point<std::chrono::system_clock,std::chrono::days> Claim::* ,sqlite_orm::internal::empty_setter>
3>        ]

This is the whole error test

ok I tried to repro this:

{
#define VERSION_2

struct Claim
{
    int id;
    int fkey_patient;
    int fkey_doctor;
    int fkey_medication;                    // for chronic meds
    std::chrono::sys_days start_date;
    std::chrono::sys_days submission_date;
    std::string asprose_claim_number;                // Claim: 85481
    std::string asprose_case_number;        // Case : 21INSENE0085
    double asprose_amount_presented;        // in colones
    std::string ins_claim_number;            // 202001017481-ACCSA0120094110
    int asprose_acknowledgement_type;        // full, partial, none: TODO: create an enum instead
    std::string comment;
    double amount;
    std::optional<int> other_system_id;
#ifdef VERSION_2
    int status;                                // sent to asprose (true or false)
#endif
};


struct Patient
{
    int id;
    std::string first_name;
    std::string last_name;
};

struct Doctor
{
    int id;
    std::string first_name;
    std::string last_name;
    int fkey_specialty;
};

struct Specialty
{
    int id;
    std::string name;
};

struct Medication
{
    int id;
    std::string name;
};

enum class InvoiceType
{
    Appointment, Exam, Medication, Therapy, Procedure
};


struct Invoice
{
    int id;
    int fkey_claim;
    std::string number;
    double amount;
    int type;
    std::string description;
    std::optional<int> fkey_INSResponse;
};

struct INSResponse
{
    int id;
    std::string liquidacion_num;    // ACCSA0121008421
    long long numero_caso;                // 20200101
    double total_bruto;                // $291.47
    double otras_deducciones;        // 0.00
    double copagos;                    // 0.00
    double coaseguros;                // $58.29
    double deducible_anual;            // 0.00
    double total_neto;                // CRC 142,134.87
    double retencion;                // 0.00
    double total_a_pagar;            // CRC 142,134.87
    std::string comentarios;        // deducible acumulado en su totalidad
    double tipo_cambio;                // 609.55
    std::chrono::sys_days date_response;
};

struct INSResponseLine
{
    int id;
    int fkey_INSResponse;
    int fkey_factura;
    //int fkey_claim;                            // fkey_factura->fkey_claim
    double monto_cubierto;
    double deducciones;
    double copago;
    double coaseguros;
    double deducible_anual;
    double total_rubro_factura;
    double porcentaje_de_monto_cubierto;    // total_rubro_factura/monto_cubierto
    double porcentaje_de_factura_cubierto;    // total_rubro_factura/fkey_factura->amount
};
    
    auto storage =
        make_storage({},
            make_table("Claims",
                make_column("id_claim", &Claim::id, primary_key().autoincrement()),
                make_column("fkey_patient", &Claim::fkey_patient),
                make_column("fkey_doctor", &Claim::fkey_doctor),
                make_column("fkey_medication", &Claim::fkey_medication),
                make_column("start_date", &Claim::start_date),
                make_column("submission_date", &Claim::submission_date),
                make_column("asprose_claim_number", &Claim::asprose_claim_number),
                make_column("asprose_case_number", &Claim::asprose_case_number),
                make_column("asprose_amount_presented", &Claim::asprose_amount_presented),
                make_column("ins_claim_number", &Claim::ins_claim_number),
                make_column("asprose_acknowledgement_type", &Claim::asprose_acknowledgement_type),
                make_column("comment", &Claim::comment),
                make_column("amount", &Claim::amount),
                make_column("other_system_id", &Claim::other_system_id),
                make_column( "status", &Claim::status),
                foreign_key(&Claim::fkey_doctor).references(&Doctor::id),
                foreign_key(&Claim::fkey_medication).references(&Medication::id),
                foreign_key(&Claim::fkey_patient).references(&Patient::id)),
            make_table("Patients",
                make_column("id_patient", &Patient::id, primary_key().autoincrement()),
                make_column("first_name", &Patient::first_name, collate_nocase()),
                make_column("last_name", &Patient::last_name, collate_nocase())),
            make_table("Doctors",
                make_column("id_doctor", &Doctor::id, primary_key().autoincrement()),
                make_column("first_name", &Doctor::first_name, collate_nocase()),
                make_column("last_name", &Doctor::last_name),
                make_column("fkey_specialty", &Doctor::fkey_specialty),
                foreign_key(&Doctor::fkey_specialty).references(&Specialty::id)),
            make_table("Specialties",
                make_column("id_specialty", &Specialty::id, primary_key().autoincrement()),
                make_column("name", &Specialty::name, collate_nocase())),
            make_table("Medications",
                make_column("id_medication", &Medication::id, primary_key().autoincrement()),
                make_column("name", &Medication::name, collate_nocase())),
            make_table("Invoices",
                make_column("id_invoice", &Invoice::id, primary_key().autoincrement()),
                make_column("fkey_claim", &Invoice::fkey_claim),
                make_column("number", &Invoice::number),
                make_column("amount", &Invoice::amount),
                make_column("type", &Invoice::type),
                make_column("description", &Invoice::description),
                make_column("fkey_INSResponse", &Invoice::fkey_INSResponse),
                foreign_key(&Invoice::fkey_claim).references(&Claim::id),
                foreign_key(&Invoice::fkey_INSResponse).references(&INSResponse::id)),
            make_table("INSResponses",
                make_column("id_INSResponse", &INSResponse::id, primary_key().autoincrement()),
                make_column("liquidacion_num", &INSResponse::liquidacion_num),
                make_column("numero_caso", &INSResponse::numero_caso),
                make_column("total_bruto", &INSResponse::total_bruto),
                make_column("otras_deducciones", &INSResponse::otras_deducciones),
                make_column("copagos", &INSResponse::copagos),
                make_column("coaseguros", &INSResponse::coaseguros),
                make_column("deducible_anual", &INSResponse::deducible_anual),
                make_column("total_neto", &INSResponse::total_neto),
                make_column("retencion", &INSResponse::retencion),
                make_column("total_a_pagar", &INSResponse::total_a_pagar),
                make_column("comentario", &INSResponse::comentarios),
                make_column("date_response", &INSResponse::date_response),
                make_column("tipo_cambio", &INSResponse::tipo_cambio)),
            make_table("INSResponseLine",
                make_column("id_INSResponseLine", &INSResponseLine::id, primary_key().autoincrement()),
                make_column("fkey_INSResponse", &INSResponseLine::fkey_INSResponse),
                make_column("fkey_factura", &INSResponseLine::fkey_factura),
                make_column("monto_cubierto", &INSResponseLine::monto_cubierto),
                make_column("deducciones", &INSResponseLine::deducciones),
                make_column("copago", &INSResponseLine::copago),
                make_column("coaseguros", &INSResponseLine::coaseguros),
                make_column("deducible_anual", &INSResponseLine::deducible_anual),
                make_column("total_rubro_factura", &INSResponseLine::total_rubro_factura),
                make_column("porcentaje_de_monto_cubierto", &INSResponseLine::porcentaje_de_monto_cubierto),
                make_column( "porcentaje_de_factura_cubierto", &INSResponseLine::porcentaje_de_factura_cubierto),
                foreign_key(&INSResponseLine::fkey_INSResponse).references(&INSResponse::id),
                foreign_key(&INSResponseLine::fkey_factura).references(&Invoice::id)));


    if (flag == 0)
    {
        flag = 1;
        storage.sync_schema(true);
    }
}

It also gives me a compilation error but a bit different. It says No member named 'print' in 'sqlite_orm::type_printer<std::chrono::time_point<std::chrono::system_clock, std::chrono::duration<int, std::ratio<86400, 1>>>>':
Снимок экрана 2023-11-05 в 01 39 29
Снимок экрана 2023-11-05 в 01 39 23

Looks like you are trying to map std::chrono::sys_days to a column but std::chrono::sys_days doesn't have built-in mapping mechanism. You either have to make it on your own or use different type for these columns. To test my idea just comment out three lines which have texts:
make_column("date_response", &INSResponse::date_response),
make_column("start_date", &Claim::start_date),
make_column("submission_date", &Claim::submission_date),.

Hope this helps.

@juandent let me close this issue until something new appears. Please check the solution I posted once you can. I am sure it never compiled before cause sqlite_orm never had built-in std::chrono::sys_days binding support