Visual Studio错误或未定义的行为?

时间:2017-09-09 23:43:37

标签: c++ visual-studio

以下代码适用于gcc,但在Visual Studio 2017和2015都失败。我没有尝试过任何其他编译器。错误是运行时而不是编译时。

#include <cassert>
#include <iostream>

class ListHook
{
};

template<typename Node, ListHook Node::*memberPtr>
struct MemberHookSpec
{
    static ListHook* hookFromNode(Node* node)
    {
        return &(node->*memberPtr);
    }
};

class Object
{
private:
    ListHook m_hook;

public:
    using HookSpec = MemberHookSpec<Object, &Object::m_hook>;

    virtual ~Object() {} // <-- Triggers the issue.

    void verifySameHook(ListHook* hook) const
    {
        bool const same_hook = (&m_hook == hook);
        std::cout << "same hook: " << same_hook << std::endl;
        assert(same_hook);
    }
};

int main()
{
    Object obj;
    obj.verifySameHook(Object::HookSpec::hookFromNode(&obj));
}

预期行为是same_hooktrue。在Visual Studio上它是false。任何人都可以在代码中看到未定义的行为吗?如果没有,我将向微软报告一个错误。

0 个答案:

没有答案