Hi Richard,
Can you, please, try to explicitly delete the default ctors instead? Find a patch attached.
the patch leads to lst.h(35): error C2280: 'GiNaC::class_info<GiNaC::registered_class_options>::class_info(void)': attempting to reference a deleted function class_info.h(48): note: see declaration of 'GiNaC::class_info<GiNaC::registered_class_options>::class_info' class_info.h(48): note: 'GiNaC::class_info<GiNaC::registered_class_options>::class_info(void)': function was explicitly deleted exprseq.h(35): error C2280: 'GiNaC::class_info<GiNaC::registered_class_options>::class_info(void)': attempting to reference a deleted function class_info.h(48): note: see declaration of 'GiNaC::class_info<GiNaC::registered_class_options>::class_info' class_info.h(48): note: 'GiNaC::class_info<GiNaC::registered_class_options>::class_info(void)': function was explicitly deleted But since these two lines are exactly those two which we need to #ifdef away because of the C2766 error, both errors can be resolved by a simple patch: diff --git a/ginac/exprseq.h b/ginac/exprseq.h index dea1e38e..61a2527d 100644 --- a/ginac/exprseq.h +++ b/ginac/exprseq.h @@ -32,7 +32,10 @@namespace GiNaC { typedef container<std::vector> exprseq; /** Declaration of container::reg_info for exprseq. */ +#ifndef _MSC_VER +// Avoid exprseq.cpp(27): error C2766: explicit specialization; 'reg_info' has already been defined template<> registered_class_info exprseq::reg_info; +#endif // defined in exprseq.cpp template<> bool exprseq::info(unsigned inf) const; diff --git a/ginac/lst.h b/ginac/lst.h index 6b047c69..415abd03 100644 --- a/ginac/lst.h +++ b/ginac/lst.h @@ -32,7 +32,10 @@namespace GiNaC { typedef container<std::list> lst; /** Declaration of container::reg_info for lst. */ +#ifndef _MSC_VER +// Avoid lst.cpp(28): error C2766: explicit specialization; 'reg_info' has already been defined template<> registered_class_info lst::reg_info; +#endif /** Specialization of container::get_default_flags() for lst. */ template<> inline unsigned lst::get_default_flags() { return status_flags::not_shareable; } This compiles and all checks pass. By the way, both declaration and definition in lst.h/cpp and exprseq.h/cpp seem to be superfluous, since even without them all tests also pass successfully... Jan