Never mind. I identified the problem. Solaris defines _L, _S, etc. macros in some libc header files. So the _L, _S in my code was replaced with some constants after preprocessing. This is a legacy problem with Solaris library, not the code. Same problem exists for ports of cygwin, and possibly OS X. On Wed, 2 Feb 2005 02:48:12 -0500, Wei Qin <weiqin@xxxxxxxxx> wrote: > I have some compilation error for one template member function on > solaris g++ 3.3.2. I don't have a problem on x86/linux port of g++. > > #include "mpz_base.hpp" // defines _mpz_base_ > template <unsigned _Len_, bool _Sign_> class _mpint_t_ { > > public: > _mpint_t_() : m() {} > _mpint_t_(const _mpz_base_<_Len_,_Sign_>& v) : m(v) {} > > ~_mpint_t_() {} > > const _mpz_base_<_Len_,_Sign_> val() const {return m;} > > // problem here > template <unsigned _L, bool _S> //line 40 > void deposit(unsigned lmb, unsigned rmb, const > _mpz_base_<_L,_S> & x) { > m.set_slice(x, lmb-rmb+1, rmb); > } > > // line 45 > ...... > }; > > When compiling, g++ complains > "mpint_type.hpp:40: error: parse error before numeric constant" > "mpint_type.hpp:45: error: semicolon missing after declaration of ` > _mpint_t_<_Len_, _Sign_>' > > I am been struggling with this problem for a while. Is this a problem > of the compiler or my coding? Experts please advise. Thanks in > advance. > > Wei >