C++ 常量到非常量指针模板参数转换
VC10和GCC 4.4接受以下内容,而Sun Studio 12不接受:C++ 常量到非常量指针模板参数转换,c++,sunstudio,C++,Sunstudio,VC10和GCC 4.4接受以下内容,而Sun Studio 12不接受: std::pair<char*, int> p1; std::pair<char* const, int> p2; p1 = p2 std::对p1; std::p2对; p1=p2 Sun Studio 12抱怨: 错误:无法使用std::pair进行初始化 std::对 任何关于为什么会发生这种情况的想法,以及我如何让Sun Studio忽略这一点的想法。我正在使用一个第三方库,仅仅为了这
std::pair<char*, int> p1;
std::pair<char* const, int> p2;
p1 = p2
std::对p1;
std::p2对;
p1=p2
Sun Studio 12抱怨:
错误:无法使用std::pair进行初始化
std::对
任何关于为什么会发生这种情况的想法,以及我如何让Sun Studio忽略这一点的想法。我正在使用一个第三方库,仅仅为了这种事情重写它是一件痛苦的事情。您确定要使用libstlport而不是libCstd吗?见: 这肯定是STL实现中的一个错误。C++98标准第20.2.2节,Pairs提供了模板构造函数
模板对(const pair&p)
,它从p
的相应成员中初始化成员第一个
和第二个
,并根据需要执行隐式转换。这似乎与Sun的std库有关
您的最佳选择可能是说服代码作者用以下内容替换作业:
p1 = std::make_pair(p2.first, p2.second);
或在施工时:
std::pair<char*, int> p1(p2.first, p2.second);
std::对p1(p2.first,p2.second);
看起来像是一个已损坏的库实现。。。你能通过实用工具标题找出模板化的构造函数是否损坏了吗?相关:好的观点。使用libCstd链接生成的代码会与使用STLPort生成的库进行比较吗?@Nick:我不确定。我从来没有试过。它可能会链接,但是如果模板实例化的二进制布局不同,并且在两个段之间传递对象,那么您的程序很可能会崩溃。此外,您可能会遇到一个与定义规则相关的链接器错误。