C7608: ограничение atomi c должно быть константным выражением при использовании range :: to_vector - PullRequest
1 голос
/ 16 марта 2020

Редактировать : я опубликовал проблему на GitHub range-v3

Итак, я пытаюсь использовать библиотеку range-v3. Но когда я компилирую свой код, он останавливается с ошибкой C7608. Вот соответствующий фрагмент:

#include "json/single_include/nlohmann/json.hpp"
#include "range-v3/include/range/v3/all.hpp"

class myClass
{
private:
    nlohmann::json json_;

public:
    auto getJSON() const { return json_; }
};

int main()
{
    std::map<int, myClass> patterns_;
    auto getJSON = [](const auto &item) { return item.getJSON(); }; //Returns a nlohmann::json
    namespace rv = ranges::views;
    std::vector<nlohmann::json> jsons = patterns_ | rv::values | rv::transform(getJSON)
                                        | ranges::to_vector;
    return 0;
}

Вывод компилятора:

C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(228): error C7608: atomic constraint should be a constant expression
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(243): note: see reference to variable template 'bool convertible_to_cont_cont_impl_frag_<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> &,nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> >' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(257): note: see reference to variable template 'bool convertible_to_cont_cont_impl_<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> &,nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> >' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(268): note: see reference to variable template 'bool convertible_to_cont_cont_impl_<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> &,nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> >' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(278): note: see reference to variable template 'bool convertible_to_cont_cont<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> &,nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> >' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(296): note: see reference to variable template 'bool convertible_to_cont_cont<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> &,nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> >' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(365): note: see reference to variable template 'bool convertible_to_cont_and_not_cont_cont<meta::id<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> >,nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> &>' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(228): note: see reference to variable template 'bool invocable<ranges::detail::to_container::fn<meta::id<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> > >,nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> &>' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(243): note: see reference to variable template 'bool convertible_to_cont_cont_impl_frag_<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer>,nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> >' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(257): note: see reference to variable template 'bool convertible_to_cont_cont_impl_<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer>,nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> >' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(268): note: see reference to variable template 'bool convertible_to_cont_cont_impl_<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer>,nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> >' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(278): note: see reference to variable template 'bool convertible_to_cont_cont<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer>,nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> >' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(296): note: see reference to variable template 'bool convertible_to_cont_cont<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer>,nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> >' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(365): note: see reference to variable template 'bool convertible_to_cont_and_not_cont_cont<meta::id<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> >,nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> >' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(228): note: see reference to variable template 'bool invocable<ranges::detail::to_container::fn<meta::id<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> > >,nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> >' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(243): note: see reference to variable template 'bool convertible_to_cont_cont_impl_frag_<ranges::transform_view<ranges::transform_view<ranges::ref_view<std::map<unsigned int,CAO::PatternSettings,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,CAO::PatternSettings> > > const >,ranges::detail::get_second>,`CAO::PatternMap::getUnifiedJSON'::`2'::<lambda_1> > &,std::vector<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer>,std::allocator<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> > > >' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(257): note: see reference to variable template 'bool convertible_to_cont_cont_impl_<ranges::transform_view<ranges::transform_view<ranges::ref_view<std::map<unsigned int,CAO::PatternSettings,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,CAO::PatternSettings> > > const >,ranges::detail::get_second>,`CAO::PatternMap::getUnifiedJSON'::`2'::<lambda_1> > &,std::vector<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer>,std::allocator<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> > > >' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(268): note: see reference to variable template 'bool convertible_to_cont_cont_impl_<ranges::transform_view<ranges::transform_view<ranges::ref_view<std::map<unsigned int,CAO::PatternSettings,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,CAO::PatternSettings> > > const >,ranges::detail::get_second>,`CAO::PatternMap::getUnifiedJSON'::`2'::<lambda_1> > &,std::vector<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer>,std::allocator<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> > > >' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(278): note: see reference to variable template 'bool convertible_to_cont_cont<ranges::transform_view<ranges::transform_view<ranges::ref_view<std::map<unsigned int,CAO::PatternSettings,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,CAO::PatternSettings> > > const >,ranges::detail::get_second>,`CAO::PatternMap::getUnifiedJSON'::`2'::<lambda_1> > &,std::vector<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer>,std::allocator<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> > > >' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(296): note: see reference to variable template 'bool convertible_to_cont_cont<ranges::transform_view<ranges::transform_view<ranges::ref_view<std::map<unsigned int,CAO::PatternSettings,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,CAO::PatternSettings> > > const >,ranges::detail::get_second>,`CAO::PatternMap::getUnifiedJSON'::`2'::<lambda_1> > &,std::vector<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer>,std::allocator<nlohmann::basic_json<std::map,std::vector,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,bool,__int64,unsigned __int64,double,std::allocator,nlohmann::adl_serializer> > > >' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(365): note: see reference to variable template 'bool convertible_to_cont_and_not_cont_cont<ranges::detail::from_range<std::vector>,ranges::transform_view<ranges::transform_view<ranges::ref_view<std::map<unsigned int,CAO::PatternSettings,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,CAO::PatternSettings> > > const >,ranges::detail::get_second>,`CAO::PatternMap::getUnifiedJSON'::`2'::<lambda_1> > &>' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include/libs/json/single_include/nlohmann/json.hpp(22646): note: see reference to class template instantiation 'nlohmann::basic_json<std::map,std::vector,std::string,bool,int64_t,uint64_t,double,std::allocator,nlohmann::adl_serializer>' being compiled
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\filesystem(2087): note: see reference to class template instantiation 'std::chrono::time_point<std::filesystem::_File_time_clock,std::chrono::duration<std::chrono::system_clock::rep,std::chrono::system_clock::period>>' being compiled
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\include\xstring(1743): note: see reference to class template instantiation 'std::basic_string_view<wchar_t,std::char_traits<wchar_t>>' being compiled
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(228): error C2131: expression did not evaluate to a constant
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(228): note: failure was caused by a read of an uninitialized symbol
C:\IT\Code_perso\Cathedral_Assets_Optimizer\include\libs\range-v3\include\range/v3/range/conversion.hpp(228): note: see usage of 'ranges::invocable<ranges::detail::to_container::fn<meta::id<nlohmann::basic_json<std::map,std::vector,std::string,bool,int64_t,uint64_t,double,std::allocator,nlohmann::adl_serializer>>>,nlohmann::basic_json<std::map,std::vector,std::string,bool,int64_t,uint64_t,double,std::allocator,nlohmann::adl_serializer>&>'

Здесь полный проект (необходимые библиотеки и файл CMake)

Используется компилятор MSV C 32 бит 16,5 (последний) с опциями /experimental:preprocessor /std:c++latest /permissive-

У кого-нибудь есть идея? Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...