mingw fails to process properly abstract class constructor intialziation which should be supported , see https://stackoverflow.com/questions/19808667/c-abstract-class-constructor-yes-or-no
this is described in
https://github.com/jtv/libpqxx/issues/336#issuecomment-645496234
Below are ERROR, SRC: connection_base.cxx, includes transaction_base.hxx
ERROR:
/home/mydir/libpqxx/src/dbtransaction.cxx: In constructor ‘pqxx::dbtransaction::dbtransaction(pqxx::connection_base&, const string&, pqxx::readwrite_policy)’:
/home/mydir/libpqxx/src/dbtransaction.cxx:45:60: error: cannot allocate an object of abstract type ‘pqxx::transaction_base’
m_start_cmd(generate_set_transaction(rw, IsolationString))
^
In file included from /home/mydir/libpqxx/include/pqxx/dbtransaction.hxx:19:0,
from /home/mydir/libpqxx/include/pqxx/dbtransaction:6,
from /home/mydir/libpqxx/src/dbtransaction.cxx:13:
/home/mydir/libpqxx/include/pqxx/transaction_base.hxx:136:36: note: because the following virtual functions are pure within ‘pqxx::transaction_base’:
class PQXX_LIBEXPORT PQXX_NOVTABLE transaction_base :
^
/home/mydir/libpqxx/include/pqxx/transaction_base.hxx:147:11: note: virtual pqxx::transaction_base::~transaction_base()
virtual ~transaction_base() =0; //[t01]
^
/home/mydir/libpqxx/include/pqxx/transaction_base.hxx:535:16: note: virtual void pqxx::transaction_base::do_begin()
virtual void do_begin() =0;
^
/home/mydir/libpqxx/include/pqxx/transaction_base.hxx:537:18: note: virtual pqxx::result pqxx::transaction_base::do_exec(const char*)
virtual result do_exec(const char Query[]) =0;
^
/home/mydir/libpqxx/include/pqxx/transaction_base.hxx:539:16: note: virtual void pqxx::transaction_base::do_commit()
virtual void do_commit() =0;
^
/home/mydir/libpqxx/include/pqxx/transaction_base.hxx:541:16: note: virtual void pqxx::transaction_base::do_abort()
virtual void do_abort() =0;
^
make[2]: *** [src/CMakeFiles/pqxx_shared.dir/dbtransaction.cxx.obj] Error 1
make[1]: *** [src/CMakeFiles/pqxx_shared.dir/all] Error 2
make: *** [all] Error 2
SRC:
connection_base.cxx
pqxx::dbtransaction::dbtransaction(
connection_base &C,
const std::string &IsolationString,
readwrite_policy rw) :
namedclass{"dbtransaction"},
transaction_base{C}, //valid initialization. but generated error message .. object of abstract type
m_start_cmd(generate_set_transaction(rw, IsolationString)) //Line 45 error: cannot allocate an object of abstract type ‘pqxx::transaction_base’
{
}
pqxx::dbtransaction::dbtransaction(
connection_base &C,
bool direct,
readwrite_policy rw) :
namedclass{"dbtransaction"},
transaction_base(C, direct),
m_start_cmd{generate_set_transaction(rw)}
{
}
pqxx::dbtransaction::~dbtransaction()
{
}
--
transaction_base.hxx
/// Interface definition (and common code) for "transaction" classes.
/**
public virtual internal::namedclass
{
public:
/// If nothing else is known, our isolation level is at least read_committed
using isolation_tag = isolation_traits<read_committed>;</read_committed>
transaction_base() =delete;
transaction_base(const transaction_base &) =delete;
transaction_base &operator=(const transaction_base &) =delete;
virtual ~transaction_base() =0; //[t01]
/// Commit the transaction
….
is occurs with compiling with x86_64-w64-mingw32-g++ (gcc) v 4.8.2
Just to clarify this issue is observed with mingw64 version got ubuntu 14/04 /Trusty