@@ -593,11 +593,17 @@ enum class TypeModifier
593593
594594// Used by ModifiedArgument to special-case an innermost nullable INPUT_OBJECT type.
595595template <TypeModifier... Other>
596- constexpr bool onlyNoneModifiers = (... && (Other == TypeModifier::None));
596+ constexpr bool onlyNoneModifiers () noexcept
597+ {
598+ return (... && (Other == TypeModifier::None));
599+ }
597600
598- // Specialized as true for all INPUT_OBJECT types.
601+ // Specialized to return true for all INPUT_OBJECT types.
599602template <typename Type>
600- constexpr bool isInputType = false ;
603+ constexpr bool isInputType ()
604+ {
605+ return false ;
606+ }
601607
602608// Extract individual arguments with chained type modifiers which add nullable or list wrappers.
603609// If the argument is not optional, use require and let it throw a schema_exception when the
@@ -612,7 +618,7 @@ struct ModifiedArgument
612618 {
613619 // Peel off modifiers until we get to the underlying type.
614620 using type = typename std::conditional_t <TypeModifier::Nullable == Modifier,
615- typename std::conditional_t <isInputType<U> && onlyNoneModifiers<Other...>,
621+ typename std::conditional_t <isInputType<U>() && onlyNoneModifiers<Other...>() ,
616622 std::unique_ptr<U>, std::optional<typename ArgumentTraits<U, Other...>::type>>,
617623 typename std::conditional_t <TypeModifier::List == Modifier,
618624 std::vector<typename ArgumentTraits<U, Other...>::type>, U>>;
@@ -692,7 +698,7 @@ struct ModifiedArgument
692698
693699 auto result = require<Other...>(name, arguments);
694700
695- if constexpr (isInputType<Type> && onlyNoneModifiers<Other...>)
701+ if constexpr (isInputType<Type>() && onlyNoneModifiers<Other...>() )
696702 {
697703 return std::make_unique<decltype (result)>(std::move (result));
698704 }
0 commit comments