Re: local function definitios are illegal
James Kanze wrote:
Just a guess, but your library made extensive use of templates.
Different compilers had different weaknesses---for VC++ 6.0,
the weakest point was definitly template support.
Yes, mild partial specialization. One of the issues that I had
(although it is rarely used, I found good use for it) was
co-variant return types. If I have to redo the library though,
I may opt for not using covariance. I had various layers
of cloning taking place depending on the applicable
client, and required co-variance e.g.
struct BaseA
{
virtual void fooA() = 0;
virtual BaseA* clone() const = 0;
};
struct BaseB : BaseA
{
using BaseA::fooA;
virtual void fooB() = 0;
virtual BaseB* clone() const = 0;//covariant.
};
Client A could use BaseA, and ClientB could use BaseB,
BaseB being an interface extension only as we did not
want all ClientA's to change...
VC++6.0 especially had this issue.
And even later. I don't think anyone would suggest using it for
a new project today, but I know more than a few old projects
which continue to use it, rather than run the risk of not
compiling (or worse, compiling but with different semantics)
with a more compliant compiler.
Hence I said "if I have a choice", but you are right (concerning
risks). Maybe the OP does have a choice, I don't know.
Nevertheless, if he asks questions concerning why things
don't compile, the most obvious reason is "Non-compliant
compiler" in this case.
Regards,
Werner