@@ -41,7 +41,7 @@ struct parse_into_container_base_impl
4141{
4242 // Parser has attribute (synthesize; Attribute is a container)
4343 template <std::forward_iterator It, std::sentinel_for<It> Se, class Context , X4Attribute Attr>
44- requires (!parser_accepts_container_v<Parser, Attr>)
44+ requires (!parser_accepts_container_v<Parser, unwrap_recursive_type< Attr> >)
4545 [[nodiscard]] static constexpr bool
4646 call_synthesize (
4747 Parser const & parser, It& first, Se const & last,
@@ -50,17 +50,18 @@ struct parse_into_container_base_impl
5050 {
5151 static_assert (!std::same_as<std::remove_const_t <Attr>, unused_container_type>);
5252
53- using value_type = traits::container_value_t <Attr>;
53+ using value_type = traits::container_value_t <unwrap_recursive_type< Attr> >;
5454 value_type val; // default-initialize
5555
56- static_assert (Parsable<Parser, It, Se, Context, value_type>);
56+ // static_assert(Parsable<Parser, It, Se, Context, value_type>);
5757 if (!parser.parse (first, last, ctx, val)) return false ;
5858
5959 // push the parsed value into our attribute
60- traits::push_back (attr, std::move (val));
60+ traits::push_back (unwrap_recursive ( attr) , std::move (val));
6161 return true ;
6262 }
6363
64+ // unused_container_type
6465 template <std::forward_iterator It, std::sentinel_for<It> Se, class Context >
6566 requires (!parser_accepts_container_v<Parser, unused_container_type>)
6667 [[nodiscard]] static constexpr bool
@@ -69,23 +70,25 @@ struct parse_into_container_base_impl
6970 Context const & ctx, unused_container_type const &
7071 ) noexcept (is_nothrow_parsable_v<Parser, It, Se, Context, unused_type>)
7172 {
72- static_assert (Parsable<Parser, It, Se, Context, unused_type>);
73+ // static_assert(Parsable<Parser, It, Se, Context, unused_type>);
7374 return parser.parse (first, last, ctx, unused);
7475 }
7576
7677 // Parser has attribute (synthesize; Attribute is a container)
7778 template <std::forward_iterator It, std::sentinel_for<It> Se, class Context , X4Attribute Attr>
78- requires parser_accepts_container_v<Parser, Attr>
79+ requires parser_accepts_container_v<Parser, unwrap_recursive_type< Attr> >
7980 [[nodiscard]] static constexpr bool
8081 call_synthesize (
8182 Parser const & parser, It& first, Se const & last,
8283 Context const & ctx, Attr& attr
83- ) noexcept (is_nothrow_parsable_v<Parser, It, Se, Context, Attr>)
84+ ) noexcept (is_nothrow_parsable_v<Parser, It, Se, Context, unwrap_recursive_type< Attr> >)
8485 {
85- static_assert (Parsable<Parser, It, Se, Context, Attr>);
86+ // static_assert(Parsable<Parser, It, Se, Context, unwrap_recursive_type< Attr> >);
8687 return parser.parse (first, last, ctx, attr);
8788 }
8889
90+ // ------------------------------------------------------
91+
8992 // Parser has attribute && it is NOT fusion sequence
9093 template <std::forward_iterator It, std::sentinel_for<It> Se, class Context , X4Attribute Attr>
9194 requires
0 commit comments