【问题标题】:const to non-const pointer template argument conversionconst 到非 const 指针模板参数转换
【发布时间】:2011-12-20 14:48:53
【问题描述】:

VC10 和 GCC 4.4 接受以下内容,而 Sun Studio 12 不接受:

std::pair<char*, int> p1;
std::pair<char* const, int> p2;
p1 = p2

Sun Studio 12 抱怨:

错误:不能使用 std::pair 初始化 std::pair.

任何想法为什么会发生这种情况以及如何让 Sun Studio 忽略这一点。我正在与第三方库合作,仅仅为这种事情重写会很痛苦。

【问题讨论】:

标签: c++ sunstudio


【解决方案1】:

这似乎是带有 Sun 标准库的 known issue。

最好的办法可能是说服代码的作者将分配替换为:

p1 = std::make_pair(p2.first, p2.second);

或在施工时:

std::pair<char*, int> p1(p2.first, p2.second);

【讨论】:

    【解决方案2】:

    您确定使用 libstlport 而不是 libCstd?见:https://stackoverflow.com/a/4481452/196844

    这绝对是 STL 实现中的错误。 C++98 标准的第 20.2.2 节,Pairs 提供了模板构造函数 template &lt;class U, class V&gt; pair(const pair&lt;U, V&gt;&amp; p),它从 p 的相应成员初始化成员 first 和 second,根据需要执行隐式转换。

    【讨论】:

    • 好点。使用 libCstd 构建的代码会链接到使用 STLPort 构建的库吗?
    • @Nick:我不确定。我从未尝试过。它可能会链接,但是如果模板实例化的二进制布局不同并且对象在两个段之间传递,那么您的程序很可能会崩溃。此外,您可能会遇到与 One Definition Rule 相关的链接器错误。
    猜你喜欢
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    相关资源
    最近更新 更多