gpt4 book ai didi

c++ - 仅在 travis-ci 上测试失败;不支持 RTTI?

转载 作者:太空宇宙 更新时间:2023-11-04 13:30:26 25 4
gpt4 key购买 nike

我有一个相当简单的测试,它在 travis-ci 持续集成服务器上失败了,但我无法重现失败。 CI 服务器似乎不支持 RTTI,但据我所知,在 gcc 上关闭 RTTI 是不可能的。

我想知道我是否在这里依赖未定义的行为,这就是导致差异的原因。谁能告诉我为什么这可能会不一致地失败?

#include <catch.hpp>

template <typename T, typename U>
T * As(U * Object)
{
return dynamic_cast<T *>(Object);
}

class Base
{
public:
Base() {}
virtual ~Base() {}
};

class Derived : public Base
{};


{
// in tests...
Derived b;

REQUIRE(As<Derived>((Base*)&b) == &b);
}

当我在各种架构上运行时,上面的测试总是通过,但在 travis-ci 上失败并进行以下扩展:

__null == 0x00007ffd6d95fe70

所以 As<Derived>((Base*)&b)正在返回 null虽然我期待它返回一些非空值。我们可以明显地看到 b实际上是一个 Derived实例 - 我的各种强制转换和取消引用是否做错了什么?

最佳答案

我将此作为对问题的评论发布,但认为它应该在答案部分。事实证明,我有多个编译单元,其中包含名为 BaseDerived 的类,并且在链接时会导致冲突。更改类的名称解决了这个问题。

关于c++ - 仅在 travis-ci 上测试失败;不支持 RTTI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31693113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com