Don't capture json input by value (fixed #1822).
This commit is contained in:
		
							parent
							
								
									fb9a2643c8
								
							
						
					
					
						commit
						ddda67a096
					
				
					 2 changed files with 48 additions and 48 deletions
				
			
		|  | @ -1782,30 +1782,30 @@ JSON_HEDLEY_DIAGNOSTIC_POP | |||
| @def NLOHMANN_JSON_SERIALIZE_ENUM | ||||
| @since version 3.4.0 | ||||
| */ | ||||
| #define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...)                                           \ | ||||
|     template<typename BasicJsonType>                                                           \ | ||||
|     inline void to_json(BasicJsonType& j, const ENUM_TYPE& e)                                  \ | ||||
|     {                                                                                          \ | ||||
|         static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!");         \ | ||||
|         static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__;                    \ | ||||
|         auto it = std::find_if(std::begin(m), std::end(m),                                     \ | ||||
|                                [e](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool \ | ||||
|         {                                                                                      \ | ||||
|             return ej_pair.first == e;                                                         \ | ||||
|         });                                                                                    \ | ||||
|         j = ((it != std::end(m)) ? it : std::begin(m))->second;                                \ | ||||
|     }                                                                                          \ | ||||
|     template<typename BasicJsonType>                                                           \ | ||||
|     inline void from_json(const BasicJsonType& j, ENUM_TYPE& e)                                \ | ||||
|     {                                                                                          \ | ||||
|         static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!");         \ | ||||
|         static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__;                    \ | ||||
|         auto it = std::find_if(std::begin(m), std::end(m),                                     \ | ||||
|                                [j](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool \ | ||||
|         {                                                                                      \ | ||||
|             return ej_pair.second == j;                                                        \ | ||||
|         });                                                                                    \ | ||||
|         e = ((it != std::end(m)) ? it : std::begin(m))->first;                                 \ | ||||
| #define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...)                                            \ | ||||
|     template<typename BasicJsonType>                                                            \ | ||||
|     inline void to_json(BasicJsonType& j, const ENUM_TYPE& e)                                   \ | ||||
|     {                                                                                           \ | ||||
|         static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!");          \ | ||||
|         static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__;                     \ | ||||
|         auto it = std::find_if(std::begin(m), std::end(m),                                      \ | ||||
|                                [e](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool  \ | ||||
|         {                                                                                       \ | ||||
|             return ej_pair.first == e;                                                          \ | ||||
|         });                                                                                     \ | ||||
|         j = ((it != std::end(m)) ? it : std::begin(m))->second;                                 \ | ||||
|     }                                                                                           \ | ||||
|     template<typename BasicJsonType>                                                            \ | ||||
|     inline void from_json(const BasicJsonType& j, ENUM_TYPE& e)                                 \ | ||||
|     {                                                                                           \ | ||||
|         static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!");          \ | ||||
|         static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__;                     \ | ||||
|         auto it = std::find_if(std::begin(m), std::end(m),                                      \ | ||||
|                                [&j](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool \ | ||||
|         {                                                                                       \ | ||||
|             return ej_pair.second == j;                                                         \ | ||||
|         });                                                                                     \ | ||||
|         e = ((it != std::end(m)) ? it : std::begin(m))->first;                                  \ | ||||
|     } | ||||
| 
 | ||||
| // Ugly macros to avoid uglier copy-paste when specializing basic_json. They
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue