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
When building sprokit in MSVC 2019 there are numerous errors generated in
vital/internal/variant/variant.hpp
. It appears that theMPARK_CPP14_CONSTEXPR
define evaluates totrue
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: