File tree Expand file tree Collapse file tree 1 file changed +21
-6
lines changed Expand file tree Collapse file tree 1 file changed +21
-6
lines changed Original file line number Diff line number Diff line change @@ -506,6 +506,16 @@ struct is_union<Union<Types...>> : std::true_type
506
506
{
507
507
};
508
508
509
+ // helper type for the visitor #4
510
+ template <class ... Ts>
511
+ struct overloaded : Ts...
512
+ {
513
+ using Ts::operator ()...;
514
+ };
515
+ // explicit deduction guide (not needed as of C++20)
516
+ template <class ... Ts>
517
+ overloaded (Ts...) -> overloaded<Ts...>;
518
+
509
519
template <typename T>
510
520
struct GraphQLBuilder
511
521
{
@@ -552,14 +562,19 @@ struct GraphQLBuilder
552
562
if (u)
553
563
return std::visit (
554
564
[]<typename V>(V&& arg) {
555
- if constexpr (std::is_same_v<typename std::remove_reference_t <U>::element_type,std::monostate>){
565
+ using model_t =
566
+ typename GraphQLUnion<typename std::remove_reference_t <U>::element_type,
567
+ typename T::element_type>::model_map::
568
+ find<typename std::remove_reference_t <V>::element_type>;
569
+ if constexpr (std::is_same_v<model_t , std::monostate>)
570
+ {
556
571
throw std::logic_error (" Unsupported variant type" );
557
- }else {
572
+ return std::shared_ptr<typename T::element_type>();
573
+ }
574
+ else
575
+ {
558
576
return GraphQLBuilder<T>::build (
559
- GraphQLBuilder<std::shared_ptr<typename GraphQLUnion<
560
- typename std::remove_reference_t <U>::element_type,
561
- typename T::element_type>::model_map::find<typename std::
562
- remove_reference_t <V>::element_type>>>::build (std::move (arg)));
577
+ GraphQLBuilder<std::shared_ptr<model_t >>::build (std::move (arg)));
563
578
}
564
579
},
565
580
std::move (u->value ));
You can’t perform that action at this time.
0 commit comments