[msvc] Work around strange scoping and name mangling rules.
1. msvc creates different symbols for a variable declared in
a namespace scope and (the same variable) in a class method
scope. That is,
// util.cpp
namespace GiNaC {
extern const ex _ex0; // [1]
}
// ex.h
namespace GiNaC {
class ex {
public:
bool is_zero() {
extern const ex _ex0;
// mangled name of _ex0 is different that of [1]
}
};
}
2. The mangled names for cv-qualified and cv-unqualified versions
of a type are different (which violates the requirements stated
in [basic.type.qualifier])
These msvc's "features" cause linking failures due to unresolved
external symbols.
Solution:
1. Declare variables (_ex0) in the GiNaC namespace scope (for msvc only).
2. Add corresponding cv-qualifier(s).