mån 2009-09-14 klockan 11:27 +0200 skrev Guido Serassio:

> Done. Sorry for the delay, but I'm very busy (as usual ...)
> 
> I have placed the preprocessed source of two failing files
> (IpIntercept.cc and QosConfig.cc) here:
> 
> http://www.acmeconsulting.it/libip.zip

Odd... std::string::npos is declared as follows:

namespace std;

template<class _Elem,
        class _Traits,
        class _Ax>
        class basic_string
                : public _String_val<_Elem, _Ax>
        {       
public:
         static const size_type npos;   
};

template<class _Elem,
        class _Traits,
        class _Alloc>
         const typename basic_string<_Elem, _Traits, _Alloc>::size_type
                basic_string<_Elem, _Traits, _Alloc>::npos =
                        (typename basic_string<_Elem, _Traits, 
_Alloc>::size_type)(-1);

typedef basic_string<char, char_traits<char>, allocator<char> >
        string;



Maybe Visual Studio drops the const attribute when trying to convert the
value from "const std::string:size_type" to "const String::size_type"
and gets lost somehow, even with the value as such being a simple size_t
integer.. 

What does it say about the attached code? My attempt in isolating the
String npos = std::string::npos code with as little change as possible
(had to kill the char_traits thing as that used template syntax not
accepted by G++ which slightly changes how size_type is declared)

Regards
Henrik
typedef long size_t;

namespace std {

template<class _Ty> class allocator
{
public:
    typedef size_t size_type;
};

template<class _Elem,
        class _Traits,
        class _Ax>
        class basic_string
        {       
public:
	typedef typename _Ax::size_type size_type;
        static const size_type npos;   
};

template<class _Elem,
        class _Traits,
        class _Alloc>
         const typename basic_string<_Elem, _Traits, _Alloc>::size_type
                basic_string<_Elem, _Traits, _Alloc>::npos =
                        (typename basic_string<_Elem, _Traits, _Alloc>::size_type)(-1);

typedef basic_string<char, char, allocator<char> >
        string;
};

class String {
	typedef size_t size_type;
	static const size_type npos = std::string::npos;
};

Reply via email to