Skip to content
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

Pybind fails to build with MSVC 19.16 in C++17 mode #2089

Closed
LeslieGerman opened this issue Jan 22, 2020 · 28 comments · Fixed by #2338 or #2431
Closed

Pybind fails to build with MSVC 19.16 in C++17 mode #2089

LeslieGerman opened this issue Jan 22, 2020 · 28 comments · Fixed by #2338 or #2431

Comments

@LeslieGerman
Copy link

LeslieGerman commented Jan 22, 2020

Fails to build with MSVC 19.16.27034.0 in C++17

I used pybind v 2.4.3

cmake -G Ninja -DPYBIND11_CPP_STANDARD=/std:c++17 ..\src
ninja

Error:

D:\Libs\Pybind\2.4.3\src\include\pybind11/stl_bind.h(415): error C2893: Failed to specialize function template 'enable_if<_Test,Ty>::type pybind11::detail::vector_buffer(Class &)'
with
[
_Ty=void
]

No problem with the default c++14 mode.

Great library, BTW! 😃 👍

@YannickJadoul
Copy link
Collaborator

YannickJadoul commented Jul 8, 2020

I can't reproduce this with pybind 2.5.0, Python 3.8, and MSVC 19.25.28614.0:

PS C:\Users\Yannick\pybind11\build> cmake .. -DPYBIND11_CPP_STANDARD=/std:c++17 -DPYTHON_EXECUTABLE=C:\Python38\python.exe               
-- Building for: Visual Studio 16 2019                                                                                                   
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.18363.                                                              
-- The CXX compiler identification is MSVC 19.25.28614.0                                                                                 
-- Check for working CXX compiler: E:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.25.28610/bin/Hostx64/x
64/cl.exe                                                                                                                                
-- Check for working CXX compiler: E:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.25.28610/bin/Hostx64/x
64/cl.exe -- works                                                                                                                       
-- Detecting CXX compiler ABI info                                                                                                       
-- Detecting CXX compiler ABI info - done                                                                                                
-- Detecting CXX compile features                                                                                                        
-- Detecting CXX compile features - done                                                                                                 
-- Found PythonInterp: C:/Python38/python.exe (found version "3.8.1")                                                                    
-- Found PythonLibs: C:/Python38/libs/python38.lib                                                                                       
-- Building tests WITHOUT Eigen                                                                                                          
-- Could NOT find Boost (missing: Boost_INCLUDE_DIR) (Required is at least version "1.56")                                               
-- Performing Test HAS_MSVC_GL_LTCG                                                                                                      
-- Performing Test HAS_MSVC_GL_LTCG - Success                                                                                            
-- LTO enabled                                                                                                                           
-- Catch not detected. Interpreter tests will be skipped. Install Catch headers manually or use `cmake -DDOWNLOAD_CATCH=1` to fetch them 
automatically.                                                                                                                           
-- Configuring done                                                                                                                      
-- Generating done                                                                                                                       
-- Build files have been written to: C:/Users/Yannick/pybind11/build                                                                     
PS C:\Users\Yannick\pybind11\build> cmake -build .                                                                                       
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.18363.                                                              
-- Building tests WITHOUT Eigen                                                                                                          
-- Could NOT find Boost (missing: Boost_INCLUDE_DIR) (Required is at least version "1.56")                                               
automatically.                                                                                                                           
-- pybind11 v2.5.dev1                                                                                                                    
-- Configuring done                                                                                                                      
-- Generating done                                                                                                                       
-- Build files have been written to: C:/Users/Yannick/pybind11/build                                                                     
> cmake --build . --target pytest                                                                      
Microsoft (R) Build Engine version 16.5.0+d4cbfca49 for .NET Framework                                                                   
Copyright (C) Microsoft Corporation. All rights reserved.                                                                                
                                                                                                                                         
  cross_module_gil_utils.vcxproj -> C:\Users\Yannick\pybind11\tests\cross_module_gil_utils.cp38-win_amd64.pyd                            
  pybind11_cross_module_tests.vcxproj -> C:\Users\Yannick\pybind11\tests\pybind11_cross_module_tests.cp38-win_amd64.pyd                  
  pybind11_tests.vcxproj -> C:\Users\Yannick\pybind11\tests\pybind11_tests.cp38-win_amd64.pyd                                            
  ------ pybind11_tests.cp38-win_amd64.pyd file size: 15982592 (no change)                   

[...]
                                            
  ============================= test session starts =============================                                                        
  platform win32 -- Python 3.8.1, pytest-5.3.5, py-1.8.1, pluggy-0.13.1                                                                  
  rootdir: C:\Users\Yannick\pybind11\tests, inifile: pytest.ini                                                                          
  plugins: cov-2.8.1, lazy-fixture-0.6.3                                                                                                 
  collected 344 items

[...]

  ======================= 314 passed, 30 skipped in 5.67s =======================                                                        

So let's assume things got fixed in 2.5.0 or a newer MSVC version? I don't think it's worth it to go retracing what actually went wrong and we're cleaning up the issues, so I'm closing this. But please reopen if this is still an issue!

@LeslieGerman
Copy link
Author

Thanks for checking this @YannickJadoul !

I tested it with 2.5.0, but unfortunately the same error occurs in C++17 mode. Still works in C++14.
I tried python 3.6 and 3.8, but no difference.

I see from your log you used Visual Studio 2019, MSVC MSVC 19.25, so looks like the compiler is the difference.

The compiler I used: MSVC 19.16, is shipped with Visual Studio 2017, which is still the "main-line" for a lot of people.

I personally could overcome this problem, so for me it's OK to close the ticket. However I would consider trying to fix this, since VS 2017 is still widely used. It's up to you.

@bstaletic
Copy link
Collaborator

Let's reopen this, but it might take some time before we can have a good look at this.

@bstaletic bstaletic reopened this Jul 9, 2020
@YannickJadoul
Copy link
Collaborator

Alright. Thanks for telling us! I'll see if I can find a VS 2017 installation, and I'll try again! :-)

@YannickJadoul
Copy link
Collaborator

@LeslieGerman Still can't reproduce with VS 2017 (MSVC 19.16.27041.0). Both with 32-bit and Python 3.7, as well as with 64-bit and Python 3.8 (these just happen to be the Python architecture versions I have installed on the Windows machine):

PS C:\Users\Yannick\pybind11\build> cmake .. -DPYBIND11_CPP_STANDARD=/std:c++17 -G "Visual Studio 15 2017"
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.18363.
-- The CXX compiler identification is MSVC 19.16.27041.0
-- Check for working CXX compiler: E:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x
86/cl.exe
-- Check for working CXX compiler: E:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x
86/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PythonInterp: C:/Program Files (x86)/Python37-32/python.exe (found version "3.7.3") 
-- Found PythonLibs: C:/Program Files (x86)/Python37-32/libs/python37.lib
-- Building tests WITHOUT Eigen
-- Could NOT find Boost (missing: Boost_INCLUDE_DIR) (Required is at least version "1.56")
-- Performing Test HAS_MSVC_GL_LTCG
-- Performing Test HAS_MSVC_GL_LTCG - Success
-- LTO enabled
-- Catch not detected. Interpreter tests will be skipped. Install Catch headers manually or use `cmake -DDOWNLOAD_CATCH=1` to fetch them 
automatically.
-- pybind11 v2.5.dev1
-- Configuring done
-- Generating done                                                                                                                       
-- Build files have been written to: C:/Users/Yannick/pybind11/build        
PS C:\Users\Yannick\pybind11\build> cmake --build . --target pytest                                                                      
Microsoft (R) Build Engine version 15.9.21+g9802d43bc3 for .NET Framework                                                                
Copyright (C) Microsoft Corporation. All rights reserved.                                                                                
                                                                                                                                         
  Checking Build System                                                                                                                  
  Building Custom Rule C:/Users/Yannick/pybind11/tests/CMakeLists.txt                                                                    
  cross_module_gil_utils.cpp                                                                                                             
     Creating library C:/Users/Yannick/pybind11/build/tests/Debug/cross_module_gil_utils.lib and object C:/Users/Yannick/pybind11/build/ 
  tests/Debug/cross_module_gil_utils.exp                                                                                                 
  cross_module_gil_utils.vcxproj -> C:\Users\Yannick\pybind11\tests\cross_module_gil_utils.cp37-win32.pyd                                
  Building Custom Rule C:/Users/Yannick/pybind11/tests/CMakeLists.txt                                                                    
  pybind11_cross_module_tests.cpp                                                                                                        
     Creating library C:/Users/Yannick/pybind11/build/tests/Debug/pybind11_cross_module_tests.lib and object C:/Users/Yannick/pybind11/b 
  uild/tests/Debug/pybind11_cross_module_tests.exp                                                                                       
  pybind11_cross_module_tests.vcxproj -> C:\Users\Yannick\pybind11\tests\pybind11_cross_module_tests.cp37-win32.pyd                      
  Building Custom Rule C:/Users/Yannick/pybind11/tests/CMakeLists.txt                                                                    
  pybind11_tests.cpp                                                                                                                     
  test_async.cpp                                                                                                                         
  test_buffers.cpp                                                                                                                       
  test_builtin_casters.cpp                                                                                                               
  test_call_policies.cpp                                                                                                                 
  test_callbacks.cpp                                                                                                                     
  test_chrono.cpp                                                                                                                        
  test_class.cpp                                                                                                                         
  test_constants_and_functions.cpp                                                                                                       
  test_copy_move.cpp                                                                                                                     
  test_custom_type_casters.cpp                                                                                                           
  test_docstring_options.cpp                                                                                                             
  test_enum.cpp                                                                                                                          
  test_eval.cpp                                                                                                                          
  test_exceptions.cpp                                                                                                                    
  test_factory_constructors.cpp                                                                                                          
  test_gil_scoped.cpp                                                                                                                    
  test_iostream.cpp                                                                                                                      
  test_kwargs_and_defaults.cpp                                                                                                           
  test_local_bindings.cpp                                                                                                                
  Generating Code...                                                                                                                     
  Compiling...                                                                                                                           
  test_methods_and_attributes.cpp                                                                                                        
  test_modules.cpp                                                                                                                       
  test_multiple_inheritance.cpp                                                                                                          
  test_numpy_array.cpp                                                                                                                   
  test_numpy_dtypes.cpp                                                                                                                  
  test_numpy_vectorize.cpp                                                                                                               
  test_opaque_types.cpp                                                                                                                  
  test_operator_overloading.cpp                                                                                                          
  test_pickling.cpp                                                                                                                      
  test_pytypes.cpp                                                                                                                       
  test_sequences_and_iterators.cpp                                                                                                       
  test_smart_ptr.cpp                                                                                                                     
  test_stl.cpp                                                                                                                           
  test_stl_binders.cpp                                                                                                                   
  test_tagbased_polymorphic.cpp                                                                                                          
  test_union.cpp                                                                                                                         
  test_virtual_functions.cpp                                                                                                             
  Generating Code...                                                                                                                     
     Creating library C:/Users/Yannick/pybind11/build/tests/Debug/pybind11_tests.lib and object C:/Users/Yannick/pybind11/build/tests/De 
  bug/pybind11_tests.exp                                                                                                                 
  pybind11_tests.vcxproj -> C:\Users\Yannick\pybind11\tests\pybind11_tests.cp37-win32.pyd                                                
  ------ pybind11_tests.cp37-win32.pyd file size: 11380736                                                                               
  ============================= test session starts =============================                                                        
  platform win32 -- Python 3.7.3, pytest-5.3.2, py-1.8.1, pluggy-0.13.1                                                                  
  rootdir: C:\Users\Yannick\pybind11\tests, inifile: pytest.ini                                                                          
  plugins: lazy-fixture-0.6.2                                                                                                            
  collected 344 items
[...]
  ======================= 314 passed, 30 skipped in 7.93s =======================                                                        
  Building Custom Rule C:/Users/Yannick/pybind11/tests/CMakeLists.txt        

Can you reproduce, and give more details about the error (i.e., not just the 6 lines from your original post, but the full log, including where the occur, and what else the compiler says about it) ?

@LeslieGerman
Copy link
Author

LeslieGerman commented Jul 10, 2020

@YannickJadoul , huh, strange!

I re-tested it again, and here's the full log:

64 bit Windows, cmake and ninja used from VS 2017, pybind 2.5.0, python 3.6.10

(pybind11_test) D:\Libs\Pybind\2.5.0\build_ninja>where cmake
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe
(pybind11_test) D:\Libs\Pybind\2.5.0\build_ninja>where ninja
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe

(pybind11_test) D:\Libs\Pybind\2.5.0\build_ninja>cmake --version
cmake version 3.12.18081601-MSVC_2

CMake suite maintained and supported by Kitware (kitware.com/cmake).
(pybind11_test) D:\Libs\Pybind\2.5.0\build_ninja>ninja --version
1.8.2
(pybind11_test) D:\Libs\Pybind\2.5.0\build_ninja>cls && cmake -G Ninja -DPYBIND11_CPP_STANDARD=/std:c++17 ..\src
-- The CXX compiler identification is MSVC 19.16.27038.0
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PythonInterp: D:/Programs/Miniconda3/envs/pybind11_test/python.exe (found version "3.6.10")
-- Found PythonLibs: D:/Programs/Miniconda3/envs/pybind11_test/libs/Python36.lib
-- Building tests WITHOUT Eigen
-- Could NOT find Boost
-- Performing Test HAS_MSVC_GL_LTCG
-- Performing Test HAS_MSVC_GL_LTCG - Success
-- LTO enabled
-- Catch not detected. Interpreter tests will be skipped. Install Catch headers manually or use `cmake -DDOWNLOAD_CATCH=1` to fetch them automatically.
-- pybind11 v2.5.0
-- Configuring done
-- Generating done
-- Build files have been written to: D:/Libs/Pybind/2.5.0/build_ninja

(pybind11_test) D:\Libs\Pybind\2.5.0\build_ninja>cmake --build .
[1/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_async.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[2/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_chrono.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[3/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_call_policies.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[4/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_constants_and_functions.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[5/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\pybind11_tests.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[6/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_callbacks.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[7/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_buffers.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[8/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_builtin_casters.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[9/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_copy_move.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[10/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_class.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[11/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_exceptions.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[12/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_docstring_options.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[13/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_enum.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[14/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_eval.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[15/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_iostream.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[16/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_gil_scoped.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[17/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_local_bindings.cpp.obj
FAILED: tests/CMakeFiles/pybind11_tests.dir/test_local_bindings.cpp.obj
C:\PROGRA~2\MICROS~2\2017\PROFES~1\VC\Tools\MSVC\1416~1.270\bin\Hostx64\x64\cl.exe  /nologo /TP -Dpybind11_tests_EXPORTS -ID:\Libs\Pybind\2.5.0\src\include -ID:\Programs\Miniconda3\envs\pybind11_test\include /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1   /std:c++17 /bigobj /W4 /utf-8 /showIncludes /Fotests\CMakeFiles\pybind11_tests.dir\test_local_bindings.cpp.obj /Fdtests\CMakeFiles\pybind11_tests.dir\ /FS -c D:\Libs\Pybind\2.5.0\src\tests\test_local_bindings.cpp
cl : Command line warning D9025 : overriding '/W3' with '/W4'
D:\Libs\Pybind\2.5.0\src\include\pybind11/stl_bind.h(434): error C2672: 'pybind11::detail::vector_buffer': no matching overloaded function found
D:\Libs\Pybind\2.5.0\src\tests\test_local_bindings.cpp(53): note: see reference to function template instantiation 'pybind11::class_<LocalVec,std::unique_ptr<Vector,std::default_delete<_Ty>>> pybind11::bind_vector<LocalVec,std::unique_ptr<_Ty,std::default_delete<_Ty>>,>(pybind11::handle,const std::string &)' being compiled
        with
        [
            Vector=LocalVec,
            _Ty=LocalVec
        ]
d:\libs\pybind\2.5.0\src\tests\pybind11_tests.h(60): note: see reference to class template instantiation 'pybind11::detail::descr<12>' being compiled
d:\libs\pybind\2.5.0\src\include\pybind11\cast.h(1602): note: see reference to class template instantiation 'pybind11::detail::descr<8>' being compiled
d:\libs\pybind\2.5.0\src\include\pybind11\cast.h(1600): note: see reference to class template instantiation 'pybind11::detail::descr<5>' being compiled
d:\libs\pybind\2.5.0\src\include\pybind11\cast.h(1145): note: see reference to class template instantiation 'pybind11::detail::descr<7>' being compiled
D:\Libs\Pybind\2.5.0\src\include\pybind11/stl_bind.h(422): error C2893: Failed to specialize function template 'enable_if<_Test,_Ty>::type pybind11::detail::vector_buffer(Class_ &)'
        with
        [
            _Ty=void
        ]
D:\Libs\Pybind\2.5.0\src\include\pybind11/stl_bind.h(422): note: With the following template arguments:
D:\Libs\Pybind\2.5.0\src\include\pybind11/stl_bind.h(422): note: 'Vector=Vector'
D:\Libs\Pybind\2.5.0\src\include\pybind11/stl_bind.h(422): note: 'Class_=Class_'
D:\Libs\Pybind\2.5.0\src\include\pybind11/stl_bind.h(422): note: 'Args={}'
[18/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_kwargs_and_defaults.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[19/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_modules.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[20/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_factory_constructors.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[21/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_numpy_vectorize.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[22/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_numpy_dtypes.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[23/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_multiple_inheritance.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[24/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_methods_and_attributes.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[25/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_numpy_array.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
[26/41] Building CXX object tests\CMakeFiles\pybind11_tests.dir\test_sequences_and_iterators.cpp.obj
cl : Command line warning D9025 : overriding '/W3' with '/W4'
ninja: build stopped: subcommand failed.

Exactly the same error with python 3.6.10, 3.7.6, 3.8.3.

@LeslieGerman
Copy link
Author

I tried with "Visual Studio 15 2017 Win64" generator, too, but it produced the same error:

64 bit Windows, pybind 2.5.0, python 3.6.10

(pybind11_test) D:\Libs\Pybind\2.5.0\build_ninja>cls && cmake -G "Visual Studio 15 2017 Win64" -DPYBIND11_CPP_STANDARD=/std:c++17 ..\src
-- Selecting Windows SDK version 10.0.17763.0 to target Windows 10.0.18363.
-- The CXX compiler identification is MSVC 19.16.27038.0
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/cl.exe
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PythonInterp: D:/Programs/Miniconda3/envs/pybind11_test/python.exe (found version "3.6.10")
-- Found PythonLibs: D:/Programs/Miniconda3/envs/pybind11_test/libs/Python36.lib
-- Building tests WITHOUT Eigen
-- Could NOT find Boost
-- Performing Test HAS_MSVC_GL_LTCG
-- Performing Test HAS_MSVC_GL_LTCG - Success
-- LTO enabled
-- Catch not detected. Interpreter tests will be skipped. Install Catch headers manually or use `cmake -DDOWNLOAD_CATCH=1` to fetch them automatically.
-- pybind11 v2.5.0
-- Configuring done
-- Generating done
-- Build files have been written to: D:/Libs/Pybind/2.5.0/build_ninja

(pybind11_test) D:\Libs\Pybind\2.5.0\build_ninja>cmake --build .
Microsoft (R) Build Engine version 15.9.21+g9802d43bc3 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

Build started 7/10/2020 6:27:16 PM.
Project "D:\Libs\Pybind\2.5.0\build_ninja\ALL_BUILD.vcxproj" on node 1 (default targets).
Project "D:\Libs\Pybind\2.5.0\build_ninja\ALL_BUILD.vcxproj" (1) is building "D:\Libs\Pybind\2.5.0\build_ninja\ZERO_CHE
CK.vcxproj" (2) on node 1 (default targets).
PrepareForBuild:
  Creating directory "x64\Debug\ZERO_CHECK\".
  Creating directory "x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\".
InitializeBuildStatus:
  Creating "x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
CustomBuild:
  Checking Build System
  CMake does not need to re-run because D:/Libs/Pybind/2.5.0/build_ninja/CMakeFiles/generate.stamp is up-to-date.
  CMake does not need to re-run because D:/Libs/Pybind/2.5.0/build_ninja/tests/CMakeFiles/generate.stamp is up-to-date.
  CMake does not need to re-run because D:/Libs/Pybind/2.5.0/build_ninja/tests/test_embed/CMakeFiles/generate.stamp is
  up-to-date.
  CMake does not need to re-run because D:/Libs/Pybind/2.5.0/build_ninja/tests/test_cmake_build/CMakeFiles/generate.sta
  mp is up-to-date.
FinalizeBuildStatus:
  Deleting file "x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild".
  Touching "x64\Debug\ZERO_CHECK\ZERO_CHECK.tlog\ZERO_CHECK.lastbuildstate".
Done Building Project "D:\Libs\Pybind\2.5.0\build_ninja\ZERO_CHECK.vcxproj" (default targets).

Project "D:\Libs\Pybind\2.5.0\build_ninja\ALL_BUILD.vcxproj" (1) is building "D:\Libs\Pybind\2.5.0\build_ninja\tests\cr
oss_module_gil_utils.vcxproj" (3) on node 1 (default targets).
PrepareForBuild:
  Creating directory "cross_module_gil_utils.dir\Debug\".
  Creating directory "cross_module_gil_utils.dir\Debug\cross_mo.6D4D950E.tlog\".
InitializeBuildStatus:
  Creating "cross_module_gil_utils.dir\Debug\cross_mo.6D4D950E.tlog\unsuccessfulbuild" because "AlwaysCreate" was speci
  fied.
CustomBuild:
  Building Custom Rule D:/Libs/Pybind/2.5.0/src/tests/CMakeLists.txt
  CMake does not need to re-run because D:/Libs/Pybind/2.5.0/build_ninja/tests/CMakeFiles/generate.stamp is up-to-date.
ClCompile:
  D:\Tools\BullseyeCoverage\bin\CL.exe /c /ID:\Libs\Pybind\2.5.0\src\include /ID:\Programs\Miniconda3\envs\pybind11_tes
  t\include /I"C:\Programs\Visual Leak Detector\include" /Zi /nologo /W4 /WX- /diagnostics:classic /Od /Ob0 /D WIN32 /D
   _WINDOWS /D "CMAKE_INTDIR=\"Debug\"" /D cross_module_gil_utils_EXPORTS /D _WINDLL /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS
   /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /GR /std:c++17 /Fo"cross_module_gil_utils.dir\Debug\\" /Fd"cross_mod
  ule_gil_utils.dir\Debug\vc141.pdb" /Gd /TP /FC /errorReport:queue  /bigobj /utf-8 D:\Libs\Pybind\2.5.0\src\tests\cros
  s_module_gil_utils.cpp
  cross_module_gil_utils.cpp
MakeDirsForLink:
  Creating directory "D:\Libs\Pybind\2.5.0\build_ninja\tests\Debug\".
Link:
  D:\Tools\BullseyeCoverage\bin\link.exe /ERRORREPORT:QUEUE /OUT:"D:\Libs\Pybind\2.5.0\src\tests\cross_module_gil_utils
  .cp36-win_amd64.pyd" /INCREMENTAL /NOLOGO /LIBPATH:"C:\Programs\Visual Leak Detector\lib\Win64" D:\Programs\Miniconda
  3\envs\pybind11_test\libs\Python36.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.
  lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /D
  EBUG /PDB:"D:/Libs/Pybind/2.5.0/src/tests/cross_module_gil_utils.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOM
  PAT /IMPLIB:"D:/Libs/Pybind/2.5.0/build_ninja/tests/Debug/cross_module_gil_utils.lib" /MACHINE:X64  /machine:x64 /DLL
   cross_module_gil_utils.dir\Debug\cross_module_gil_utils.obj
     Creating library D:/Libs/Pybind/2.5.0/build_ninja/tests/Debug/cross_module_gil_utils.lib and object D:/Libs/Pybind
  /2.5.0/build_ninja/tests/Debug/cross_module_gil_utils.exp
  cross_module_gil_utils.vcxproj -> D:\Libs\Pybind\2.5.0\src\tests\cross_module_gil_utils.cp36-win_amd64.pyd
FinalizeBuildStatus:
  Deleting file "cross_module_gil_utils.dir\Debug\cross_mo.6D4D950E.tlog\unsuccessfulbuild".
  Touching "cross_module_gil_utils.dir\Debug\cross_mo.6D4D950E.tlog\cross_module_gil_utils.lastbuildstate".
Done Building Project "D:\Libs\Pybind\2.5.0\build_ninja\tests\cross_module_gil_utils.vcxproj" (default targets).

Project "D:\Libs\Pybind\2.5.0\build_ninja\ALL_BUILD.vcxproj" (1) is building "D:\Libs\Pybind\2.5.0\build_ninja\tests\py
bind11_cross_module_tests.vcxproj" (4) on node 1 (default targets).
PrepareForBuild:
  Creating directory "pybind11_cross_module_tests.dir\Debug\".
  Creating directory "pybind11_cross_module_tests.dir\Debug\pybind11.5499A21F.tlog\".
InitializeBuildStatus:
  Creating "pybind11_cross_module_tests.dir\Debug\pybind11.5499A21F.tlog\unsuccessfulbuild" because "AlwaysCreate" was
  specified.
CustomBuild:
  Building Custom Rule D:/Libs/Pybind/2.5.0/src/tests/CMakeLists.txt
  CMake does not need to re-run because D:/Libs/Pybind/2.5.0/build_ninja/tests/CMakeFiles/generate.stamp is up-to-date.
ClCompile:
  D:\Tools\BullseyeCoverage\bin\CL.exe /c /ID:\Libs\Pybind\2.5.0\src\include /ID:\Programs\Miniconda3\envs\pybind11_tes
  t\include /I"C:\Programs\Visual Leak Detector\include" /Zi /nologo /W4 /WX- /diagnostics:classic /Od /Ob0 /D WIN32 /D
   _WINDOWS /D "CMAKE_INTDIR=\"Debug\"" /D pybind11_cross_module_tests_EXPORTS /D _WINDLL /D _MBCS /Gm- /EHsc /RTC1 /MD
  d /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /GR /std:c++17 /Fo"pybind11_cross_module_tests.dir\Debug\\" /Fd
  "pybind11_cross_module_tests.dir\Debug\vc141.pdb" /Gd /TP /FC /errorReport:queue  /bigobj /utf-8 D:\Libs\Pybind\2.5.0
  \src\tests\pybind11_cross_module_tests.cpp
  pybind11_cross_module_tests.cpp
d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(434): error C2672: 'pybind11::detail::vector_buffer': no matching
overloaded function found [D:\Libs\Pybind\2.5.0\build_ninja\tests\pybind11_cross_module_tests.vcxproj]
  d:\libs\pybind\2.5.0\src\tests\pybind11_cross_module_tests.cpp(52): note: see reference to function template instanti
  ation 'pybind11::class_<LocalVec,std::unique_ptr<Vector,std::default_delete<_Ty>>> pybind11::bind_vector<LocalVec,std
  ::unique_ptr<_Ty,std::default_delete<_Ty>>,>(pybind11::handle,const std::string &)' being compiled
          with
          [
              Vector=LocalVec,
              _Ty=LocalVec
          ]
  d:\libs\pybind\2.5.0\src\tests\pybind11_tests.h(60): note: see reference to class template instantiation 'pybind11::d
  etail::descr<12>' being compiled
  d:\libs\pybind\2.5.0\src\include\pybind11\cast.h(1602): note: see reference to class template instantiation 'pybind11
  ::detail::descr<8>' being compiled
  d:\libs\pybind\2.5.0\src\include\pybind11\cast.h(1600): note: see reference to class template instantiation 'pybind11
  ::detail::descr<5>' being compiled
  d:\libs\pybind\2.5.0\src\include\pybind11\cast.h(1145): note: see reference to class template instantiation 'pybind11
  ::detail::descr<7>' being compiled
d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(422): error C2893: Failed to specialize function template 'enable_
if<_Test,_Ty>::type pybind11::detail::vector_buffer(Class_ &)' [D:\Libs\Pybind\2.5.0\build_ninja\tests\pybind11_cross_m
odule_tests.vcxproj]
          with
          [
              _Ty=void
          ]
  d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(422): note: With the following template arguments:
  d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(422): note: 'Vector=Vector'
  d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(422): note: 'Class_=Class_'
  d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(422): note: 'Args={}'
Done Building Project "D:\Libs\Pybind\2.5.0\build_ninja\tests\pybind11_cross_module_tests.vcxproj" (default targets) --
 FAILED.

Project "D:\Libs\Pybind\2.5.0\build_ninja\ALL_BUILD.vcxproj" (1) is building "D:\Libs\Pybind\2.5.0\build_ninja\tests\py
bind11_tests.vcxproj" (5) on node 1 (default targets).
PrepareForBuild:
  Creating directory "pybind11_tests.dir\Debug\".
  Creating directory "pybind11_tests.dir\Debug\pybind11_tests.tlog\".
InitializeBuildStatus:
  Creating "pybind11_tests.dir\Debug\pybind11_tests.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
CustomBuild:
  Building Custom Rule D:/Libs/Pybind/2.5.0/src/tests/CMakeLists.txt
  CMake does not need to re-run because D:/Libs/Pybind/2.5.0/build_ninja/tests/CMakeFiles/generate.stamp is up-to-date.
ClCompile:
  D:\Tools\BullseyeCoverage\bin\CL.exe /c /ID:\Libs\Pybind\2.5.0\src\include /ID:\Programs\Miniconda3\envs\pybind11_tes
  t\include /I"C:\Programs\Visual Leak Detector\include" /Zi /nologo /W4 /WX- /diagnostics:classic /Od /Ob0 /D WIN32 /D
   _WINDOWS /D "CMAKE_INTDIR=\"Debug\"" /D pybind11_tests_EXPORTS /D _WINDLL /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:pre
  cise /Zc:wchar_t /Zc:forScope /Zc:inline /GR /std:c++17 /Fo"pybind11_tests.dir\Debug\\" /Fd"pybind11_tests.dir\Debug\
  vc141.pdb" /Gd /TP /FC /errorReport:queue  /bigobj /utf-8 D:\Libs\Pybind\2.5.0\src\tests\pybind11_tests.cpp D:\Libs\P
  ybind\2.5.0\src\tests\test_async.cpp D:\Libs\Pybind\2.5.0\src\tests\test_buffers.cpp D:\Libs\Pybind\2.5.0\src\tests\t
  est_builtin_casters.cpp D:\Libs\Pybind\2.5.0\src\tests\test_call_policies.cpp D:\Libs\Pybind\2.5.0\src\tests\test_cal
  lbacks.cpp D:\Libs\Pybind\2.5.0\src\tests\test_chrono.cpp D:\Libs\Pybind\2.5.0\src\tests\test_class.cpp D:\Libs\Pybin
  d\2.5.0\src\tests\test_constants_and_functions.cpp D:\Libs\Pybind\2.5.0\src\tests\test_copy_move.cpp D:\Libs\Pybind\2
  .5.0\src\tests\test_docstring_options.cpp D:\Libs\Pybind\2.5.0\src\tests\test_enum.cpp D:\Libs\Pybind\2.5.0\src\tests
  \test_eval.cpp D:\Libs\Pybind\2.5.0\src\tests\test_exceptions.cpp D:\Libs\Pybind\2.5.0\src\tests\test_factory_constru
  ctors.cpp D:\Libs\Pybind\2.5.0\src\tests\test_gil_scoped.cpp D:\Libs\Pybind\2.5.0\src\tests\test_iostream.cpp D:\Libs
  \Pybind\2.5.0\src\tests\test_kwargs_and_defaults.cpp D:\Libs\Pybind\2.5.0\src\tests\test_local_bindings.cpp D:\Libs\P
  ybind\2.5.0\src\tests\test_methods_and_attributes.cpp D:\Libs\Pybind\2.5.0\src\tests\test_modules.cpp D:\Libs\Pybind\
  2.5.0\src\tests\test_multiple_inheritance.cpp D:\Libs\Pybind\2.5.0\src\tests\test_numpy_array.cpp D:\Libs\Pybind\2.5.
  0\src\tests\test_numpy_dtypes.cpp D:\Libs\Pybind\2.5.0\src\tests\test_numpy_vectorize.cpp D:\Libs\Pybind\2.5.0\src\te
  sts\test_opaque_types.cpp D:\Libs\Pybind\2.5.0\src\tests\test_operator_overloading.cpp D:\Libs\Pybind\2.5.0\src\tests
  \test_pickling.cpp D:\Libs\Pybind\2.5.0\src\tests\test_pytypes.cpp D:\Libs\Pybind\2.5.0\src\tests\test_sequences_and_
  iterators.cpp D:\Libs\Pybind\2.5.0\src\tests\test_smart_ptr.cpp D:\Libs\Pybind\2.5.0\src\tests\test_stl.cpp D:\Libs\P
  ybind\2.5.0\src\tests\test_stl_binders.cpp D:\Libs\Pybind\2.5.0\src\tests\test_tagbased_polymorphic.cpp D:\Libs\Pybin
  d\2.5.0\src\tests\test_union.cpp D:\Libs\Pybind\2.5.0\src\tests\test_virtual_functions.cpp
  pybind11_tests.cpp
  test_async.cpp
  test_buffers.cpp
  test_builtin_casters.cpp
  test_call_policies.cpp
  test_callbacks.cpp
  test_chrono.cpp
  test_class.cpp
  test_constants_and_functions.cpp
  test_copy_move.cpp
  test_docstring_options.cpp
  test_enum.cpp
  test_eval.cpp
  test_exceptions.cpp
  test_factory_constructors.cpp
  test_gil_scoped.cpp
  test_iostream.cpp
  test_kwargs_and_defaults.cpp
  test_local_bindings.cpp
d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(434): error C2672: 'pybind11::detail::vector_buffer': no matching
overloaded function found [D:\Libs\Pybind\2.5.0\build_ninja\tests\pybind11_tests.vcxproj]
  d:\libs\pybind\2.5.0\src\tests\test_local_bindings.cpp(53): note: see reference to function template instantiation 'p
  ybind11::class_<LocalVec,std::unique_ptr<Vector,std::default_delete<_Ty>>> pybind11::bind_vector<LocalVec,std::unique
  _ptr<_Ty,std::default_delete<_Ty>>,>(pybind11::handle,const std::string &)' being compiled
          with
          [
              Vector=LocalVec,
              _Ty=LocalVec
          ]
  d:\libs\pybind\2.5.0\src\tests\pybind11_tests.h(60): note: see reference to class template instantiation 'pybind11::d
  etail::descr<12>' being compiled
  d:\libs\pybind\2.5.0\src\include\pybind11\cast.h(1602): note: see reference to class template instantiation 'pybind11
  ::detail::descr<8>' being compiled
  d:\libs\pybind\2.5.0\src\include\pybind11\cast.h(1600): note: see reference to class template instantiation 'pybind11
  ::detail::descr<5>' being compiled
  d:\libs\pybind\2.5.0\src\include\pybind11\cast.h(1145): note: see reference to class template instantiation 'pybind11
  ::detail::descr<7>' being compiled
d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(422): error C2893: Failed to specialize function template 'enable_
if<_Test,_Ty>::type pybind11::detail::vector_buffer(Class_ &)' [D:\Libs\Pybind\2.5.0\build_ninja\tests\pybind11_tests.v
cxproj]
          with
          [
              _Ty=void
          ]
  d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(422): note: With the following template arguments:
  d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(422): note: 'Vector=Vector'
  d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(422): note: 'Class_=Class_'
  d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(422): note: 'Args={}'
  test_methods_and_attributes.cpp
  Generating Code...
  Compiling...
  test_modules.cpp
  test_multiple_inheritance.cpp
  test_numpy_array.cpp
  test_numpy_dtypes.cpp
  test_numpy_vectorize.cpp
  test_opaque_types.cpp
  test_operator_overloading.cpp
  test_pickling.cpp
  test_pytypes.cpp
  test_sequences_and_iterators.cpp
  test_smart_ptr.cpp
  test_stl.cpp
  test_stl_binders.cpp
d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(434): error C2672: 'pybind11::detail::vector_buffer': no matching
overloaded function found [D:\Libs\Pybind\2.5.0\build_ninja\tests\pybind11_tests.vcxproj]
  d:\libs\pybind\2.5.0\src\tests\test_stl_binders.cpp(72): note: see reference to function template instantiation 'pybi
  nd11::class_<std::vector<El,std::allocator<_Ty>>,std::unique_ptr<Vector,std::default_delete<std::vector<_Ty,std::allo
  cator<_Ty>>>>> pybind11::bind_vector<std::vector<_Ty,std::allocator<_Ty>>,std::unique_ptr<Vector,std::default_delete<
  std::vector<_Ty,std::allocator<_Ty>>>>,>(pybind11::handle,const std::string &)' being compiled
          with
          [
              _Ty=El,
              Vector=std::vector<El,std::allocator<El>>
          ]
  d:\libs\pybind\2.5.0\src\tests\pybind11_tests.h(60): note: see reference to class template instantiation 'pybind11::d
  etail::descr<12>' being compiled
  d:\libs\pybind\2.5.0\src\include\pybind11\cast.h(1602): note: see reference to class template instantiation 'pybind11
  ::detail::descr<8>' being compiled
  d:\libs\pybind\2.5.0\src\include\pybind11\cast.h(1600): note: see reference to class template instantiation 'pybind11
  ::detail::descr<5>' being compiled
  d:\libs\pybind\2.5.0\src\include\pybind11\cast.h(1145): note: see reference to class template instantiation 'pybind11
  ::detail::descr<7>' being compiled
d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(422): error C2893: Failed to specialize function template 'enable_
if<_Test,_Ty>::type pybind11::detail::vector_buffer(Class_ &)' [D:\Libs\Pybind\2.5.0\build_ninja\tests\pybind11_tests.v
cxproj]
          with
          [
              _Ty=void
          ]
  d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(422): note: With the following template arguments:
  d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(422): note: 'Vector=Vector'
  d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(422): note: 'Class_=Class_'
  d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(422): note: 'Args={}'
  test_tagbased_polymorphic.cpp
  test_union.cpp
  test_virtual_functions.cpp
  Generating Code...
Done Building Project "D:\Libs\Pybind\2.5.0\build_ninja\tests\pybind11_tests.vcxproj" (default targets) -- FAILED.

Done Building Project "D:\Libs\Pybind\2.5.0\build_ninja\ALL_BUILD.vcxproj" (default targets) -- FAILED.


Build FAILED.

"D:\Libs\Pybind\2.5.0\build_ninja\ALL_BUILD.vcxproj" (default target) (1) ->
"D:\Libs\Pybind\2.5.0\build_ninja\tests\pybind11_cross_module_tests.vcxproj" (default target) (4) ->
(ClCompile target) ->
  d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(434): error C2672: 'pybind11::detail::vector_buffer': no matchin
g overloaded function found [D:\Libs\Pybind\2.5.0\build_ninja\tests\pybind11_cross_module_tests.vcxproj]
  d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(422): error C2893: Failed to specialize function template 'enabl
e_if<_Test,_Ty>::type pybind11::detail::vector_buffer(Class_ &)' [D:\Libs\Pybind\2.5.0\build_ninja\tests\pybind11_cross
_module_tests.vcxproj]


"D:\Libs\Pybind\2.5.0\build_ninja\ALL_BUILD.vcxproj" (default target) (1) ->
"D:\Libs\Pybind\2.5.0\build_ninja\tests\pybind11_tests.vcxproj" (default target) (5) ->
  d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(434): error C2672: 'pybind11::detail::vector_buffer': no matchin
g overloaded function found [D:\Libs\Pybind\2.5.0\build_ninja\tests\pybind11_tests.vcxproj]
  d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(422): error C2893: Failed to specialize function template 'enabl
e_if<_Test,_Ty>::type pybind11::detail::vector_buffer(Class_ &)' [D:\Libs\Pybind\2.5.0\build_ninja\tests\pybind11_tests
.vcxproj]
  d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(434): error C2672: 'pybind11::detail::vector_buffer': no matchin
g overloaded function found [D:\Libs\Pybind\2.5.0\build_ninja\tests\pybind11_tests.vcxproj]
  d:\libs\pybind\2.5.0\src\include\pybind11\stl_bind.h(422): error C2893: Failed to specialize function template 'enabl
e_if<_Test,_Ty>::type pybind11::detail::vector_buffer(Class_ &)' [D:\Libs\Pybind\2.5.0\build_ninja\tests\pybind11_tests
.vcxproj]

    0 Warning(s)
    6 Error(s)

Time Elapsed 00:02:27.87

I did NOT try with 32 bit compiler and 32 bit python...

@YannickJadoul
Copy link
Collaborator

Thanks! :-) Let's see if the full errors make sense, now!
So one difference is ninja vs. just MSBuild? But it would be weird if that's the issue.

I did NOT try with 32 bit compiler and 32 bit python...

Don't, it's fine like this. Both worked for me.

@YannickJadoul
Copy link
Collaborator

Oh, something else. Have you tried updating VS? It's probably not going to be that, but ...

@bstaletic
Copy link
Collaborator

I think I've seen this before. If I recall correctly, a workaround is adding an empty docstring.

Try something like this: py::bind_vector<SomeType(scope, "SomeType", "");.

@YannickJadoul
Copy link
Collaborator

YannickJadoul commented Jul 10, 2020

I think I've seen this before. If I recall correctly, a workaround is adding an empty docstring.

Try something like this: py::bind_vector<SomeType(scope, "SomeType", "");.

But it's in pybind11's own tests? So if I can't reproduce, there's a difference between @LeslieGerman's MSVC 19.16.27038.0 and my MSVC 19.16.27041.0?

If I recall correctly, a workaround is adding an empty docstring.

Or ditching a broken compiler and an environment/OS that demonstrates again and again it's really not made for development? ;-)

@YannickJadoul
Copy link
Collaborator

Hooooooold your horses. Running that build again with VERBOSE=1 somehow shows I'm still compiling with C++14, rather than 17, even though I specified -DPYBIND11_CPP_STANDARD=/std:c++17. You're not telling me that's some kind of weird powershell, thing, right? I thought I finally had a shell on Windows with ls and dir and sane (sane'ish) rules about quoting etc??

@YannickJadoul
Copy link
Collaborator

YannickJadoul commented Jul 10, 2020

OK. Reproduced. So some weird compiler thing we'll have to make a workaround for?

Thanks for holding on, @LeslieGerman!

EDIT: I reproduced by putting PYBIND11_CPP_STANDARD="/std:c++17"

@LeslieGerman
Copy link
Author

You are welcome! 😄

@YannickJadoul
Copy link
Collaborator

@LeslieGerman, this issue is only triggered without /permissive-, btw. It's up for debate what to do with it (work around the issue, or just enforce /permissive- for C++17), but adding /permissive- should fix things?

@LeslieGerman
Copy link
Author

@YannickJadoul , the ideal would be that pybind (and the tests) could be compiled both with /permissive- and without /permissive- 😁 ...
MS docu on /permissive- says, that it might break things, and so this is not a "mature" option yet. Also CMake doesn't provide an API for it, and does not apply it.

I think lots of people does not use /permissive-. Maybe some years later...
So IMO implementing a workaround is better.

@YannickJadoul
Copy link
Collaborator

@LeslieGerman, we were planning to add it to pybind11's CMake by default (but I didn't get to that yet), but we didn't find a maintainer willing to maintain support for the compiler if it doesn't comply to the standard. Also, this is only from C++17 (C++14 still works without /permissive-), and apparently, Visual Studio itself started adding the flag by default in newly created projects (see here).

I'm open to other arguments, but it's frustrating to chase problems and work around things that aren't specified in the standard. For example, this error: I don't even know why MSVC doesn't manage to compile the template without /permissive-. If we'd get a nice description of why, it becomes easier to work around it and write future code that is compatible.

If someone wants to submit a PR to fix something, and the PR is something local that doesn't hinder the other compilers, I'm pretty sure it will be easily accepted. If you feel called, please do ;-)

@henryiii
Copy link
Collaborator

Note: from what I understand, this works fine in VS 2019 as is? I'm not sure I'd trust a compiler that came out in 2017 to support a language revision that was finished late 2017.

@YannickJadoul
Copy link
Collaborator

Note: from what I understand, this works fine in VS 2019 as is? I'm not sure I'd trust a compiler that came out in 2017 to support a language revision that was finished late 2017.

Last I checked: no, it doesn't, because without /permissive-, MSVC doesn't fully comply with the standard in C++17, which results in an error in our current code base.
Also, I believe C++17 is supported in the latest updates of VS 2017. Maybe it's called /std:c++latest there, I should check.

@YannickJadoul
Copy link
Collaborator

Last I checked: no, it doesn't, because without /permissive-, MSVC doesn't fully comply with the standard in C++17, which results in an error in our current code base.
Also, I believe C++17 is supported in the latest updates of VS 2017. Maybe it's called /std:c++latest there, I should check.

Scratch that, sorry. Once again, you're completely correct, @henryiii!

As far as I can confirm, only VS 2017 (or MSVC 14.1x / 19.1x ¹), C++17, without /permissive- fails. So in that case, adding a note to the docs about VS 2017 not being fully compatible with C++17 mode without /permissive- seems fine enough to me.

(Again, unless some MSVC user is eager to find how to fix that bug in VS 2017 C++17 mode and is willing to provide a patch?)

¹ Even with this glorious Wikipedia page, I'm confused. These are the version numbes CMake gave me:

-- The CXX compiler identification is MSVC 19.16.27042.0
-- Check for working CXX compiler: E:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/
Tools/MSVC/14.16.27023/bin/Hostx86/x64/cl.exe
-- Check for working CXX compiler: E:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/
Tools/MSVC/14.16.27023/bin/Hostx86/x64/cl.exe -- works

@YannickJadoul
Copy link
Collaborator

Corollary: That does mean that currently, we still seem to be supporting MSVC foo.bar.baz.qux.xyzzy (the one from VS 2019), without requiring /permissive-.

Should we officially support that, or follow MS themselves in considering /permissive- to be the new default?
In the former case, we should test that in CI; in the latter, we should add a note to the docs.

@henryiii
Copy link
Collaborator

MSVC 2019 supports C++17 just fine with no changes, we are now testing that in GHA. We should add a note to the docs that MSVC 2017 can build and pass our test suite in C++17 mode with /permissive-, but given that there are downsides to enabling it, I would let it be explicit and wouldn't surprise a user with it. I still don't think it's really fair to expect MSVC 2017 to fully support C++17. If you have to use MSVC 2017, you should use C++14 or add the /permissive- flag manually and accept the consequences if it breaks something.

@YannickJadoul
Copy link
Collaborator

Agreed. I'll rework my investigating PR to add a note to the docs. But I would nót add it by default, then!
If VS 2019 starts acting up on C++17 mode, at some point, without /permissive-, we can still reconsider.

@LeslieGerman, @bstaletic, is that something you can live with?
@LeslieGerman, again: if you know how to fix VS 2017's C++17 mode in a clean way, feel free to submit a PR. But I think @henryiii makes a great point about a C++17 compiler from 2017...

@bstaletic
Copy link
Collaborator

is that something you can live with?

Absolutely.

C++17 compiler from 2017...

According to cppreference, _MSC_VER 19.14 is the one that implemented entire C++17 standard. Bugs, of course, not withstanding. As the famous wiki page tells us, _MSC_VER of 19.14 means MSVC 14.14 and Visual Studio 2017 15.7.

Though pybind isn't the first library that I've used that doesn't work with MSC 19.14 and C++17 - GTest was the other.

@henryiii
Copy link
Collaborator

henryiii commented Aug 8, 2020

Honestly, this flag would be much easier to add after #2370, I'd be okay with adding if building with MSVC 2017. And then we could enable the test for MSVC 2017 + C++17, too. Nevermind, forgot it was in C++17 mode only. We could provide a helper target to make it easier to add (very slightly easier, anyway), but good docs are probably better. We might be able add something for testing, though.

@YannickJadoul
Copy link
Collaborator

I'm going to reopen this so I don't forget making that PR that updates the docs.

@LeslieGerman
Copy link
Author

@LeslieGerman, again: if you know how to fix VS 2017's C++17 mode in a clean way, feel free to submit a PR. But I think @henryiii makes a great point about a C++17 compiler from 2017...

I agree, @henryiii is right about the C++17 compiler support.

Guys, it's awesome how much care and work you put into this issue I reported - I did not hope this 😄
I think you can be proud of the work you make with pybind11!
🥇 👏

@YannickJadoul
Copy link
Collaborator

Thanks, @LeslieGerman! :-) And thanks for sticking along and trying out all these things so we could debug!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment