Skip to content

Commit 71e6e58

Browse files
authored
Merge pull request #82446 from ehughsbaird/only-if-copy-from
Don't try relative/proportion if no copy-from
2 parents 6f7480f + 05cf536 commit 71e6e58

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

src/generic_factory.h

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -879,6 +879,10 @@ template<typename MemberType>
879879
inline void optional( const JsonObject &jo, const bool was_loaded, const std::string_view name,
880880
MemberType &member )
881881
{
882+
if( !was_loaded ) {
883+
warn_disabled_feature( jo, "relative", name, "no copy-from" );
884+
warn_disabled_feature( jo, "proportional", name, "no copy-from" );
885+
}
882886
if( !jo.read( name, member ) && !handle_proportional( jo, name, member ) &&
883887
!handle_relative( jo, name, member ) ) {
884888
if( !was_loaded ) {
@@ -903,6 +907,10 @@ template<typename MemberType, typename DefaultType = MemberType,
903907
inline void optional( const JsonObject &jo, const bool was_loaded, const std::string_view name,
904908
MemberType &member, const DefaultType &default_value )
905909
{
910+
if( !was_loaded ) {
911+
warn_disabled_feature( jo, "relative", name, "no copy-from" );
912+
warn_disabled_feature( jo, "proportional", name, "no copy-from" );
913+
}
906914
if( !jo.read( name, member ) && !handle_proportional( jo, name, member ) &&
907915
!handle_relative( jo, name, member ) ) {
908916
if( !was_loaded ) {
@@ -1493,14 +1501,20 @@ class generic_typed_reader
14931501
template < typename C, std::enable_if_t < !reader_detail::handler<C>::is_container,
14941502
int > = 0 >
14951503
bool operator()( const JsonObject &jo, const std::string_view member_name,
1496-
C &member, bool /*was_loaded*/ ) const {
1504+
C &member, bool was_loaded ) const {
14971505
const Derived &derived = static_cast<const Derived &>( *this );
14981506
// or no handler for the container
14991507
warn_disabled_feature( jo, "extend", member_name, "not container" );
15001508
warn_disabled_feature( jo, "delete", member_name, "not container" );
1509+
if( !was_loaded ) {
1510+
warn_disabled_feature( jo, "relative", member_name, "no copy-from" );
1511+
warn_disabled_feature( jo, "proportional", member_name, "no copy-from" );
1512+
}
15011513
return derived.read_normal( jo, member_name, member ) ||
1502-
handle_proportional( jo, member_name, member ) || //not every reader uses proportional
1503-
derived.do_relative( jo, member_name, member ); //readers can override relative handling
1514+
// not every reader handles proportional
1515+
handle_proportional( jo, member_name, member ) ||
1516+
// readers can override relative handling
1517+
derived.do_relative( jo, member_name, member );
15041518
}
15051519
};
15061520

0 commit comments

Comments
 (0)