boost :: python :: enum large uint32 crash

时间:2015-12-17 10:33:12

标签: python boost boost-python

我正在尝试使用boost :: python(boost 1.58)包装c ++枚举。枚举的类型为uint32_t,除了大数字之外,所有值都包装没有问题,从0x4000 0000开始。

尝试将枚举值(uint32)包装为0x4000 0000会导致enum.hpp崩溃,第95行(增强1.58)。我用VS2012(win7)观察到这种行为。

有什么想法吗?

示例:

enum EnumName: uint32_t
{
   valueOK = 0x20000000,
   valueCrash = 0x40000000
};

boost::python::enum_<EnumName>("EnumName")
        .value("valueOK", valueOK)
        .value("valueCrash", valueCrash)
        ;

1 个答案:

答案 0 :(得分:0)

我无法重现这个问题。使用

<强> Live On Coliru

#include <boost/python.hpp>

enum EnumName: uint32_t
{
   valueOK = 0x20000000,
   valueCrash = 0x40000000
};


EnumName identity_(EnumName x) { return x; }

BOOST_PYTHON_MODULE(test)
{
    boost::python::enum_<EnumName>("EnumName")
        .value("valueOK", valueOK)
        .value("valueCrash", valueCrash)
        ;

    //boost::python::def("identity", identity_);
}

大厦:

g++-5 -std=c++11 -Wall -pedantic -fPIC -fsanitize=undefined -g -O0 -isystem /home/sehe/custom/nonius/include -isystem /usr/include/python2.7 -pthread test.cpp -c -o test.o
g++-5 -std=c++11 -Wall -pedantic -fPIC -fsanitize=undefined -g -O0 -isystem /home/sehe/custom/nonius/include -isystem /usr/include/python2.7 -pthread test.o -shared -o test.so -lpython2.7 -lboost_python

使用

$ python2.7 <<< 'from test import *; print (EnumName.valueCrash+0);'
1073741824