Kitware / kwiver

Pulls Together Computer Vision Algorithms into Highly-Modular Run-Time Configurable Systems
Other
187 stars 83 forks source link

MSVC 2019 cannot compile variant.hpp #1035

Open mleotta opened 3 years ago

mleotta commented 3 years ago

When building sprokit in MSVC 2019 there are numerous errors generated in vital/internal/variant/variant.hpp. It appears that the MPARK_CPP14_CONSTEXPR define evaluates to true on this compiler, but it is not able to correctly compile the C++14 code in the #ifdef. I assume earlier MSVC compilers used the #else case.

It looks like this file was ported from Boost. Maybe we need to get an updated copy from a newer release of Boost?

Examples of errors:

Severity    Code    Description Project File    Line    Suppression State
Error   C3546   '...': there are no parameter packs available to expand (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)  sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 389 
Error   C2955   'kwiver::vital::detail::traits': use of class template requires template argument list (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)   sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 389 
Error   C2119   '<range>$L0': the type for 'auto &&' cannot be deduced from an empty initializer (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx) sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 389 
Error   C2672   'begin': no matching overloaded function found (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)   sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 389 
Error   C2893   Failed to specialize function template 'unknown-type std::begin(_Container &)' (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)   sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 389 
Error   C2784   'const _Elem *std::begin(std::initializer_list<_Elem>) noexcept': could not deduce template argument for 'std::initializer_list<_Elem>' from 'int' (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)   sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 389 
Error   C2672   'end': no matching overloaded function found (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx) sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 389 
Error   C2893   Failed to specialize function template 'unknown-type std::end(_Container &)' (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx) sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 389 
Error   C2784   'const _Elem *std::end(std::initializer_list<_Elem>) noexcept': could not deduce template argument for 'std::initializer_list<_Elem>' from 'int' (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx) sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 389 
Error   C3536   '<begin>$L0': cannot be used before it is initialized (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)    sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 389 
Error   C3536   '<end>$L0': cannot be used before it is initialized (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)  sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 389 
Error   C2100   illegal indirection (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)  sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 389 
Error   C2440   'initializing': cannot convert from 'int' to 'kwiver::vital::detail::Trait' (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)  sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 389 
Error   C2131   expression did not evaluate to a constant (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)    sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 417 
Error   C2131   expression did not evaluate to a constant (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)    sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 422 
Error   C2131   expression did not evaluate to a constant (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)    sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 427 
Error   C2131   expression did not evaluate to a constant (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)    sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 433 
Error   C2131   expression did not evaluate to a constant (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)    sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 439 
Error   C2976   'kwiver::vital::detail::copy_assignment': too few template arguments (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx) sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 1208    
Error   C2504   'kwiver::vital::detail::copy_assignment<kwiver::vital::detail::traits<sprokit::config_pipe_block,sprokit::process_pipe_block,sprokit::connect_pipe_block>,copy_assignable_trait>': base class undefined (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)  sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 1208    
Error   C2027   use of undefined type 'kwiver::vital::detail::copy_assignment<kwiver::vital::detail::traits<sprokit::config_pipe_block,sprokit::process_pipe_block,sprokit::connect_pipe_block>,copy_assignable_trait>' (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)  sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 1212    
Error   C3881   can only inherit constructor from direct base (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)    sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 1212    
Error   C2027   use of undefined type 'kwiver::vital::detail::copy_assignment<kwiver::vital::detail::traits<sprokit::config_pipe_block,sprokit::process_pipe_block,sprokit::connect_pipe_block>,copy_assignable_trait>' (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)  sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 1213    
Error   C2504   'kwiver::vital::detail::copy_assignment<kwiver::vital::detail::traits<sprokit::cluster_config_t,sprokit::cluster_input_t,sprokit::cluster_output_t>,copy_assignable_trait>': base class undefined (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)    sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 1208    
Error   C2027   use of undefined type 'kwiver::vital::detail::copy_assignment<kwiver::vital::detail::traits<sprokit::cluster_config_t,sprokit::cluster_input_t,sprokit::cluster_output_t>,copy_assignable_trait>' (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)    sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 1212    
Error   C2027   use of undefined type 'kwiver::vital::detail::copy_assignment<kwiver::vital::detail::traits<sprokit::cluster_config_t,sprokit::cluster_input_t,sprokit::cluster_output_t>,copy_assignable_trait>' (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)    sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 1213    
Error   C2504   'kwiver::vital::detail::copy_assignment<kwiver::vital::detail::traits<sprokit::config_pipe_block,sprokit::process_pipe_block,sprokit::connect_pipe_block,sprokit::cluster_pipe_block>,copy_assignable_trait>': base class undefined (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)  sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 1208    
Error   C2027   use of undefined type 'kwiver::vital::detail::copy_assignment<kwiver::vital::detail::traits<sprokit::config_pipe_block,sprokit::process_pipe_block,sprokit::connect_pipe_block,sprokit::cluster_pipe_block>,copy_assignable_trait>' (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)  sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 1212    
Error   C2027   use of undefined type 'kwiver::vital::detail::copy_assignment<kwiver::vital::detail::traits<sprokit::config_pipe_block,sprokit::process_pipe_block,sprokit::connect_pipe_block,sprokit::cluster_pipe_block>,copy_assignable_trait>' (compiling source file C:\Users\matt.leotta\source\repos\kwiver\sprokit\src\sprokit\pipeline_util\pipe_parser.cxx)  sprokit_pipeline_util   C:\Users\matt.leotta\source\repos\kwiver\vital\internal\variant\variant.hpp 1213    
dstoup commented 3 years ago

This issue should be fixed and in release and master.