-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Add more integer conversions #6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Judging by the failed checks, different compilers behave very differently. |
Yeah, it's tricky.. The behavior is also quite different on whether you compile for 32 bit or 64 bit platforms because size_t will change type and potentially collide with some overloads. |
f5e0300
to
42af9c2
Compare
By the way: I didn't unterstand why you can't return |
I don't understand why it happens, but if I define a function,
compile it on Linux (without adding the lines to
|
8a34f70
to
6e213c9
Compare
FYI: I committed a few more integer overloads for |
Have you confirmed it? Do you have access to Linux? For me it happens only under Linux (not under OS X), but it does happen. I don't understand it either: as you say, the existing overloads should get triggered. It could be a compiler bug, but it happens both with GCC 5.2 and Clang 3.7. |
I could not reproduce it yet. However, I have just committed another attempt to just make integer type handling completely generic using a template construction. Can you please retry with the latest version? |
(see 60c36db) |
Yes, it works! (And a nice solution, I might add. Comparing |
Great -- closing this then. |
This should insure that both the PythonLibs and PythonInterp points to the same python version. Without this, the Python library and interpreter might not match version. For example, if both Python 2.7 and 3.4 is installed, PythonLibs will find /usr/lib/x86_64-linux-gnu/libpython3.4m.so while PythonInterp will find /usr/bin/python2.7 (at least on Ubuntu 14.04). When PythonLibs and PythonInterp don't point to the same Python version, the examples will all fail: $ cmake .. -- The C compiler identification is GNU 4.8.4 -- The CXX compiler identification is GNU 4.8.4 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Setting build type to 'MinSizeRel' as none was specified. -- Found PythonLibs: /usr/lib/x86_64-linux-gnu/libpython3.4m.so (found suitable version "3.4.3", minimum required is "2.7") -- Found PythonInterp: /usr/bin/python2.7 (found suitable version "2.7.6", minimum required is "2.7") -- Performing Test HAS_LTO_FLAG -- Performing Test HAS_LTO_FLAG - Success -- Configuring done -- Generating done -- Build files have been written to: /home/nbigaouette/pybind11/build $ make test Running tests... Test project /home/nbigaouette/pybind11/build Start 1: example1 1/12 Test pybind#1: example1 .........................***Failed 0.02 sec Start 2: example2 2/12 Test pybind#2: example2 .........................***Failed 0.03 sec Start 3: example3 3/12 Test pybind#3: example3 .........................***Failed 0.02 sec Start 4: example4 4/12 Test pybind#4: example4 .........................***Failed 0.02 sec Start 5: example5 5/12 Test pybind#5: example5 .........................***Failed 0.02 sec Start 6: example6 6/12 Test pybind#6: example6 .........................***Failed 0.02 sec Start 7: example7 7/12 Test pybind#7: example7 .........................***Failed 0.02 sec Start 8: example8 8/12 Test pybind#8: example8 .........................***Failed 0.02 sec Start 9: example9 9/12 Test pybind#9: example9 .........................***Failed 0.02 sec Start 10: example10 10/12 Test pybind#10: example10 ........................***Failed 0.02 sec Start 11: example11 11/12 Test pybind#11: example11 ........................***Failed 0.03 sec Start 12: example12 12/12 Test pybind#12: example12 ........................***Failed 0.02 sec 0% tests passed, 12 tests failed out of 12 Total Test time (real) = 0.25 sec The following tests FAILED: 1 - example1 (Failed) 2 - example2 (Failed) 3 - example3 (Failed) 4 - example4 (Failed) 5 - example5 (Failed) 6 - example6 (Failed) 7 - example7 (Failed) 8 - example8 (Failed) 9 - example9 (Failed) 10 - example10 (Failed) 11 - example11 (Failed) 12 - example12 (Failed) Errors while running CTest make: *** [test] Error 8 By adding the EXACT version to the find_package() calls, the version discrepency is at least caught at the cmake call: $ cmake .. -- The C compiler identification is GNU 4.8.4 -- The CXX compiler identification is GNU 4.8.4 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Setting build type to 'MinSizeRel' as none was specified. CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:108 (message): Could NOT find PythonLibs: Found unsuitable version "3.4.3", but required is exact version "2.7" (found /usr/lib/x86_64-linux-gnu/libpython3.4m.so) Call Stack (most recent call first): /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:313 (_FPHSA_FAILURE_MESSAGE) /usr/share/cmake-2.8/Modules/FindPythonLibs.cmake:208 (FIND_PACKAGE_HANDLE_STANDARD_ARGS) CMakeLists.txt:27 (find_package) -- Configuring incomplete, errors occurred! See also "/home/nbigaouette/pybind11/build/CMakeFiles/CMakeOutput.log".
…ts to the same python version. Without this, the Python library and interpreter might not match version. For example, if both Python 2.7 and 3.4 is installed, `PythonLibs` will find /usr/lib/x86_64-linux-gnu/libpython3.4m.so while `PythonInterp` will find /usr/bin/python2.7 (at least on Ubuntu 14.04). When `PythonLibs` and `PythonInterp` don't point to the same Python version, the examples will all fail: ```bash $ cmake .. -- The C compiler identification is GNU 4.8.4 -- The CXX compiler identification is GNU 4.8.4 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Setting build type to 'MinSizeRel' as none was specified. -- Found PythonLibs: /usr/lib/x86_64-linux-gnu/libpython3.4m.so (found suitable version "3.4.3", minimum required is "2.7") -- Found PythonInterp: /usr/bin/python2.7 (found suitable version "2.7.6", minimum required is "2.7") -- Performing Test HAS_LTO_FLAG -- Performing Test HAS_LTO_FLAG - Success -- Configuring done -- Generating done -- Build files have been written to: /home/nbigaouette/pybind11/build $ make test Running tests... Test project /home/nbigaouette/pybind11/build Start 1: example1 1/12 Test pybind#1: example1 .........................***Failed 0.02 sec Start 2: example2 2/12 Test pybind#2: example2 .........................***Failed 0.03 sec Start 3: example3 3/12 Test pybind#3: example3 .........................***Failed 0.02 sec Start 4: example4 4/12 Test pybind#4: example4 .........................***Failed 0.02 sec Start 5: example5 5/12 Test pybind#5: example5 .........................***Failed 0.02 sec Start 6: example6 6/12 Test pybind#6: example6 .........................***Failed 0.02 sec Start 7: example7 7/12 Test pybind#7: example7 .........................***Failed 0.02 sec Start 8: example8 8/12 Test pybind#8: example8 .........................***Failed 0.02 sec Start 9: example9 9/12 Test pybind#9: example9 .........................***Failed 0.02 sec Start 10: example10 10/12 Test pybind#10: example10 ........................***Failed 0.02 sec Start 11: example11 11/12 Test pybind#11: example11 ........................***Failed 0.03 sec Start 12: example12 12/12 Test pybind#12: example12 ........................***Failed 0.02 sec 0% tests passed, 12 tests failed out of 12 Total Test time (real) = 0.25 sec The following tests FAILED: 1 - example1 (Failed) 2 - example2 (Failed) 3 - example3 (Failed) 4 - example4 (Failed) 5 - example5 (Failed) 6 - example6 (Failed) 7 - example7 (Failed) 8 - example8 (Failed) 9 - example9 (Failed) 10 - example10 (Failed) 11 - example11 (Failed) 12 - example12 (Failed) Errors while running CTest make: *** [test] Error 8 ``` By adding the `EXACT` version to the `find_package()` calls, the version discrepancy is at least caught at the cmake call: ```bash $ cmake .. -- The C compiler identification is GNU 4.8.4 -- The CXX compiler identification is GNU 4.8.4 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Setting build type to 'MinSizeRel' as none was specified. CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:108 (message): Could NOT find PythonLibs: Found unsuitable version "3.4.3", but required is exact version "2.7" (found /usr/lib/x86_64-linux-gnu/libpython3.4m.so) Call Stack (most recent call first): /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:313 (_FPHSA_FAILURE_MESSAGE) /usr/share/cmake-2.8/Modules/FindPythonLibs.cmake:208 (FIND_PACKAGE_HANDLE_STANDARD_ARGS) CMakeLists.txt:27 (find_package) -- Configuring incomplete, errors occurred! See also "/home/nbigaouette/pybind11/build/CMakeFiles/CMakeOutput.log". ```
This should insure that both the `PythonLibs` and `PythonInterp` points to the same python version. Without this, the Python library and interpreter might not match version. For example, if both Python 2.7 and 3.4 is installed, `PythonLibs` will find /usr/lib/x86_64-linux-gnu/libpython3.4m.so while `PythonInterp` will find /usr/bin/python2.7 (at least on Ubuntu 14.04). When `PythonLibs` and `PythonInterp` don't point to the same Python version, the examples will all fail: ```bash $ cmake .. -- The C compiler identification is GNU 4.8.4 -- The CXX compiler identification is GNU 4.8.4 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Setting build type to 'MinSizeRel' as none was specified. -- Found PythonLibs: /usr/lib/x86_64-linux-gnu/libpython3.4m.so (found suitable version "3.4.3", minimum required is "2.7") -- Found PythonInterp: /usr/bin/python2.7 (found suitable version "2.7.6", minimum required is "2.7") -- Performing Test HAS_LTO_FLAG -- Performing Test HAS_LTO_FLAG - Success -- Configuring done -- Generating done -- Build files have been written to: /home/nbigaouette/pybind11/build $ make test Running tests... Test project /home/nbigaouette/pybind11/build Start 1: example1 1/12 Test pybind#1: example1 .........................***Failed 0.02 sec Start 2: example2 2/12 Test pybind#2: example2 .........................***Failed 0.03 sec Start 3: example3 3/12 Test pybind#3: example3 .........................***Failed 0.02 sec Start 4: example4 4/12 Test pybind#4: example4 .........................***Failed 0.02 sec Start 5: example5 5/12 Test pybind#5: example5 .........................***Failed 0.02 sec Start 6: example6 6/12 Test pybind#6: example6 .........................***Failed 0.02 sec Start 7: example7 7/12 Test pybind#7: example7 .........................***Failed 0.02 sec Start 8: example8 8/12 Test pybind#8: example8 .........................***Failed 0.02 sec Start 9: example9 9/12 Test pybind#9: example9 .........................***Failed 0.02 sec Start 10: example10 10/12 Test pybind#10: example10 ........................***Failed 0.02 sec Start 11: example11 11/12 Test pybind#11: example11 ........................***Failed 0.03 sec Start 12: example12 12/12 Test pybind#12: example12 ........................***Failed 0.02 sec 0% tests passed, 12 tests failed out of 12 Total Test time (real) = 0.25 sec The following tests FAILED: 1 - example1 (Failed) 2 - example2 (Failed) 3 - example3 (Failed) 4 - example4 (Failed) 5 - example5 (Failed) 6 - example6 (Failed) 7 - example7 (Failed) 8 - example8 (Failed) 9 - example9 (Failed) 10 - example10 (Failed) 11 - example11 (Failed) 12 - example12 (Failed) Errors while running CTest make: *** [test] Error 8 ``` By adding the `EXACT` version to the `find_package()` calls, the version discrepancy is at least caught at the cmake call: ```bash $ cmake .. -- The C compiler identification is GNU 4.8.4 -- The CXX compiler identification is GNU 4.8.4 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Setting build type to 'MinSizeRel' as none was specified. CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:108 (message): Could NOT find PythonLibs: Found unsuitable version "3.4.3", but required is exact version "2.7" (found /usr/lib/x86_64-linux-gnu/libpython3.4m.so) Call Stack (most recent call first): /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:313 (_FPHSA_FAILURE_MESSAGE) /usr/share/cmake-2.8/Modules/FindPythonLibs.cmake:208 (FIND_PACKAGE_HANDLE_STANDARD_ARGS) CMakeLists.txt:27 (find_package) -- Configuring incomplete, errors occurred! See also "/home/nbigaouette/pybind11/build/CMakeFiles/CMakeOutput.log". ```
Ensure casting to/from unique_ptr works.
Without the changes in
cast.h
, on Linux, I'm unable to returnunsigned long long
from a function (works on Mac). Without the changes toint_
(at least the constructor fromunsigned
), I cannot do things likepy::int_((uint32_t) 1)
.