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