编译器不会有问题, 应该STL的问题
在我VC9.0上编译没什么问题.
执行svec.assign(slist.begin() , slist.end())的核心语句是
for (; _First != _Last; ++_Dest, ++_First)
_Al.construct(_Dest, *_First); // first等于list::iterator类型, 解开就等于char* p = "mary"
_Al.construct(_Dest, *_First);展开等于
::new (_Vptr) _T1(_Val); //_Val = char*类型 = "mary", _T1 = string类型
所以string( "mary" )完全是合法调用.
而你的编译器提示list::iterator无法转换成string*类型. 这实在让人费解,
我不相信你的STL会有类似string* p = list::iterator的间接操作.
是不是你STL文件被无意改过了.
比如删掉了*解引用操作符.
因为我删掉了*后, 我的编译器显式错误如下:
>d:\vc++\vc\include\memory(129) : error C2664: “std::allocator<_Ty>::construct”: 不能将参数 2 从“std::list<_Ty>::_Iterator<_Secure_validation>”转换为“const std::string &”
吓尿了.
我用vs10上试验了,完全可以啊,估计你用的是6.0吧,6.0标准库支持不全。