Skip to content

Commit 07ebed1

Browse files
committed
Replace constexpr variables in header with functions
1 parent 4748d11 commit 07ebed1

File tree

7 files changed

+106
-30
lines changed

7 files changed

+106
-30
lines changed

include/graphqlservice/GraphQLService.h

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -593,11 +593,17 @@ enum class TypeModifier
593593

594594
// Used by ModifiedArgument to special-case an innermost nullable INPUT_OBJECT type.
595595
template <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.
599602
template <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
}

samples/learn/schema/StarWarsSchema.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,10 @@ std::shared_ptr<schema::Schema> GetSchema();
9090
namespace service {
9191

9292
template <>
93-
constexpr bool isInputType<learn::ReviewInput> = true;
93+
constexpr bool isInputType<learn::ReviewInput>()
94+
{
95+
return true;
96+
}
9497

9598
} // namespace service
9699
} // namespace graphql

samples/today/nointrospection/TodaySchema.h

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -160,21 +160,52 @@ std::shared_ptr<schema::Schema> GetSchema();
160160
namespace service {
161161

162162
template <>
163-
constexpr bool isInputType<today::CompleteTaskInput> = true;
163+
constexpr bool isInputType<today::CompleteTaskInput>()
164+
{
165+
return true;
166+
}
167+
164168
template <>
165-
constexpr bool isInputType<today::ThirdNestedInput> = true;
169+
constexpr bool isInputType<today::ThirdNestedInput>()
170+
{
171+
return true;
172+
}
173+
166174
template <>
167-
constexpr bool isInputType<today::FourthNestedInput> = true;
175+
constexpr bool isInputType<today::FourthNestedInput>()
176+
{
177+
return true;
178+
}
179+
168180
template <>
169-
constexpr bool isInputType<today::IncludeNullableSelfInput> = true;
181+
constexpr bool isInputType<today::IncludeNullableSelfInput>()
182+
{
183+
return true;
184+
}
185+
170186
template <>
171-
constexpr bool isInputType<today::IncludeNonNullableListSelfInput> = true;
187+
constexpr bool isInputType<today::IncludeNonNullableListSelfInput>()
188+
{
189+
return true;
190+
}
191+
172192
template <>
173-
constexpr bool isInputType<today::SecondNestedInput> = true;
193+
constexpr bool isInputType<today::SecondNestedInput>()
194+
{
195+
return true;
196+
}
197+
174198
template <>
175-
constexpr bool isInputType<today::ForwardDeclaredInput> = true;
199+
constexpr bool isInputType<today::ForwardDeclaredInput>()
200+
{
201+
return true;
202+
}
203+
176204
template <>
177-
constexpr bool isInputType<today::FirstNestedInput> = true;
205+
constexpr bool isInputType<today::FirstNestedInput>()
206+
{
207+
return true;
208+
}
178209

179210
} // namespace service
180211
} // namespace graphql

samples/today/schema/TodaySchema.h

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -160,21 +160,52 @@ std::shared_ptr<schema::Schema> GetSchema();
160160
namespace service {
161161

162162
template <>
163-
constexpr bool isInputType<today::CompleteTaskInput> = true;
163+
constexpr bool isInputType<today::CompleteTaskInput>()
164+
{
165+
return true;
166+
}
167+
164168
template <>
165-
constexpr bool isInputType<today::ThirdNestedInput> = true;
169+
constexpr bool isInputType<today::ThirdNestedInput>()
170+
{
171+
return true;
172+
}
173+
166174
template <>
167-
constexpr bool isInputType<today::FourthNestedInput> = true;
175+
constexpr bool isInputType<today::FourthNestedInput>()
176+
{
177+
return true;
178+
}
179+
168180
template <>
169-
constexpr bool isInputType<today::IncludeNullableSelfInput> = true;
181+
constexpr bool isInputType<today::IncludeNullableSelfInput>()
182+
{
183+
return true;
184+
}
185+
170186
template <>
171-
constexpr bool isInputType<today::IncludeNonNullableListSelfInput> = true;
187+
constexpr bool isInputType<today::IncludeNonNullableListSelfInput>()
188+
{
189+
return true;
190+
}
191+
172192
template <>
173-
constexpr bool isInputType<today::SecondNestedInput> = true;
193+
constexpr bool isInputType<today::SecondNestedInput>()
194+
{
195+
return true;
196+
}
197+
174198
template <>
175-
constexpr bool isInputType<today::ForwardDeclaredInput> = true;
199+
constexpr bool isInputType<today::ForwardDeclaredInput>()
200+
{
201+
return true;
202+
}
203+
176204
template <>
177-
constexpr bool isInputType<today::FirstNestedInput> = true;
205+
constexpr bool isInputType<today::FirstNestedInput>()
206+
{
207+
return true;
208+
}
178209

179210
} // namespace service
180211
} // namespace graphql

samples/validation/schema/ValidationSchema.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,10 @@ std::shared_ptr<schema::Schema> GetSchema();
129129
namespace service {
130130

131131
template <>
132-
constexpr bool isInputType<validation::ComplexInput> = true;
132+
constexpr bool isInputType<validation::ComplexInput>()
133+
{
134+
return true;
135+
}
133136

134137
} // namespace service
135138
} // namespace graphql

src/SchemaGenerator.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -543,11 +543,13 @@ GRAPHQLSERVICE_EXPORT )cpp" << _loader.getSchemaNamespace()
543543
headerFile << R"cpp(template <>
544544
constexpr bool isInputType<)cpp"
545545
<< _loader.getSchemaNamespace() << R"cpp(::)cpp" << inputType.cppType
546-
<< R"cpp(> = true;
546+
<< R"cpp(>()
547+
{
548+
return true;
549+
}
550+
547551
)cpp";
548552
}
549-
550-
headerFile << std::endl;
551553
}
552554

553555
return true;

test/ArgumentTests.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -334,16 +334,16 @@ TEST(ArgumentsCase, FindArgumentEmptyTemplateArgs)
334334

335335
TEST(ArgumentsCase, OnlyNoneModifiers)
336336
{
337-
constexpr bool emptyModifiers = service::onlyNoneModifiers<>;
337+
constexpr bool emptyModifiers = service::onlyNoneModifiers<>();
338338
constexpr bool threeNone = service::onlyNoneModifiers<service::TypeModifier::None,
339339
service::TypeModifier::None,
340-
service::TypeModifier::None>;
340+
service::TypeModifier::None>();
341341
constexpr bool firtNullable = service::onlyNoneModifiers<service::TypeModifier::Nullable,
342342
service::TypeModifier::None,
343-
service::TypeModifier::None>;
343+
service::TypeModifier::None>();
344344
constexpr bool middleList = service::onlyNoneModifiers<service::TypeModifier::None,
345345
service::TypeModifier::List,
346-
service::TypeModifier::None>;
346+
service::TypeModifier::None>();
347347

348348
ASSERT_TRUE(emptyModifiers) << "onlyNoneModifiers<> is true";
349349
ASSERT_TRUE(threeNone) << "onlyNoneModifiers<None, None, None> is true";

0 commit comments

Comments
 (0)