I guess I'm missing something. Why not just move the existing C declarations verbatim to an APR-free header (from svn_types.h to svn_types_impl.h, for instance), and in C++ use them directly like this (proposed lines marked '>'):
/** * @brief Revision number type. */ - enum class number : long + enum class number : svn__impl__revnum_t > enum class number : svn_revnum_t { - invalid = -1, ///< Invalid revision number. + invalid = SVN__IMPL__INVALID_REVNUM, ///< Invalid revision number. > invalid = SVN_INVALID_REVNUM, ///< Invalid revision number. }; Then there would be no need for all the reimplementing in svn_types.h with lines like "A = __impl__A". Oh... I suppose the reason is because you don't want the C++ headers to expose the original C declarations. But is that such a problem? I'm thinking of the existing SWIG Python bindings where we map C name svn_client_add to Python name "svn.client.add", primarily, but we also leave the original name hanging around as "svn.client.svn_client_add" or something like that, and AFAIK it's not much of a problem, just a little untidy. Overall, if this is what it takes for you to proceed with the good work, then sure, go ahead: it looks like a manageable amount of churn. -- - Julian