Alexander Bubnov writes:
> #include<string>
> template<typename _C> struct string_conv_impl;
>
> template<typename _D, typename _S>
> inline std::basic_string<_D> string_conv(std::basic_string<_S> const& src)
> {
> return string_conv_impl<_D>::do_conv(src.c_str());
> }
>
> int main(){}
Looking at the output from "g++ -E cpp.cpp" should be useful here. It
shows this mess:
# 2 "cpp.cpp" 2
template<typename 0x00000020> struct string_conv_impl;
template<typename _D, typename 0x00000008>
inline std::basic_string<_D> string_conv(std::basic_string<0x00000008> const&
src)
Looking back at the original source, it appears that the problem is
that you're using identifiers that start with "_". The standard
reserves identifiers such as those to the operating environment -- you
can't use them in any portable application.
In this case, <iso/ctype.h> defines _C and _S as part of the standard
<sys/ctype.h> mechanism.
Fixing that bug produces a program fragment that compiles just fine on
both Linux and OpenSolaris.
#include<string>
template<typename C> struct string_conv_impl;
template<typename D, typename S>
inline std::basic_string<D> string_conv(std::basic_string<S> const& src)
{
return string_conv_impl<D>::do_conv(src.c_str());
}
int main(){}
--
James Carlson, Solaris Networking <james.d.carlson at sun.com>
Sun Microsystems / 35 Network Drive 71.232W Vox +1 781 442 2084
MS UBUR02-212 / Burlington MA 01803-2757 42.496N Fax +1 781 442 1677