Skip to content

Commit fbae577

Browse files
committed
Fix compilation errors with GCC 11, remove nested deduction guides and use parenthesis initialization for objects of template type
1 parent b6263b4 commit fbae577

File tree

1 file changed

+25
-10
lines changed

1 file changed

+25
-10
lines changed

lug/lug.hpp

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -579,14 +579,14 @@ template <class E1>
579579
struct unary_encoder_expression_interface
580580
{
581581
using expression_trait = encoder_expression_trait_tag; E1 e1;
582-
template <class X1> constexpr explicit unary_encoder_expression_interface(X1&& x1) noexcept : e1{std::forward<X1>(x1)} {}
582+
template <class X1> constexpr explicit unary_encoder_expression_interface(X1&& x1) noexcept : e1(std::forward<X1>(x1)) {}
583583
};
584584

585585
template <class E1, class E2>
586586
struct binary_encoder_expression_interface
587587
{
588588
using expression_trait = encoder_expression_trait_tag; E1 e1; E2 e2;
589-
template <class X1, class X2> constexpr binary_encoder_expression_interface(X1&& x1, X2&& x2) noexcept : e1{std::forward<X1>(x1)}, e2{std::forward<X2>(x2)} {}
589+
template <class X1, class X2> constexpr binary_encoder_expression_interface(X1&& x1, X2&& x2) noexcept : e1(std::forward<X1>(x1)), e2(std::forward<X2>(x2)) {}
590590
};
591591

592592
class basic_regular_expression : public terminal_encoder_expression_interface
@@ -700,7 +700,7 @@ template <class Pred>
700700
struct predicate_expression : terminal_encoder_expression_interface
701701
{
702702
Pred pred;
703-
template <class P> constexpr explicit predicate_expression(P&& p) noexcept(std::is_nothrow_constructible_v<Pred, P&&>) : pred{std::forward<P>(p)} {}
703+
template <class P> constexpr explicit predicate_expression(P&& p) noexcept(std::is_nothrow_constructible_v<Pred, P&&>) : pred(std::forward<P>(p)) {}
704704
template <class M> [[nodiscard]] constexpr auto operator()(encoder& d, M const& m) const -> M const& { d.encode(opcode::predicate, syntactic_predicate{pred}); return m; }
705705
};
706706

@@ -776,10 +776,22 @@ struct directive_modifier
776776
struct directive_expression : unary_encoder_expression_interface<E1>
777777
{
778778
using unary_encoder_expression_interface<E1>::unary_encoder_expression_interface;
779-
template <class M> [[nodiscard]] constexpr decltype(auto) operator()(encoder& d, M const& m) const { d.dpsh(EnableMask, DisableMask); auto m2 = d.evaluate(this->e1, m); d.dpop(RelayMask); return m2; }
779+
780+
template <class M>
781+
[[nodiscard]] constexpr decltype(auto) operator()(encoder& d, M const& m) const
782+
{
783+
d.dpsh(EnableMask, DisableMask);
784+
auto m2 = d.evaluate(this->e1, m);
785+
d.dpop(RelayMask);
786+
return m2;
787+
}
780788
};
781-
template <class X1> directive_expression(X1&&) -> directive_expression<std::decay_t<X1>>;
782-
template <class E, class = std::enable_if_t<is_expression_v<E>>> [[nodiscard]] constexpr auto operator[](E const& e) const noexcept { return directive_expression{make_expression(e)}; }
789+
790+
template <class E, class = std::enable_if_t<is_expression_v<E>>>
791+
[[nodiscard]] constexpr auto operator[](E const& e) const noexcept
792+
{
793+
return directive_expression<std::decay_t<decltype(make_expression(e))>>{make_expression(e)};
794+
}
783795
};
784796

785797
inline constexpr directive_modifier<directives::none, directives::none, directives::none> matches_eps{};
@@ -851,12 +863,15 @@ struct condition_block_combinator
851863
}
852864
};
853865

854-
template <class X1> condition_block_expression(X1&&, std::string_view n) -> condition_block_expression<std::decay_t<X1>>;
855-
856866
struct condition_block_group
857867
{
858868
std::string_view name;
859-
template <class E, class = std::enable_if_t<is_expression_v<E>>> [[nodiscard]] constexpr auto operator[](E const& e) const noexcept { return condition_block_expression{make_expression(e), name}; }
869+
870+
template <class E, class = std::enable_if_t<is_expression_v<E>>>
871+
[[nodiscard]] constexpr auto operator[](E const& e) const noexcept
872+
{
873+
return condition_block_expression<std::decay_t<decltype(make_expression(e))>>{make_expression(e), name};
874+
}
860875
};
861876

862877
[[nodiscard]] constexpr condition_block_group operator()(std::string_view name) const noexcept { return condition_block_group{name}; }
@@ -980,7 +995,7 @@ template <class Derived, class E1, class Operand>
980995
struct attribute_action_expression : unary_encoder_expression_interface<E1>
981996
{
982997
Operand operand;
983-
template <class X1, class O> constexpr attribute_action_expression(X1&& x1, O&& o) noexcept : unary_encoder_expression_interface<E1>{std::forward<X1>(x1)}, operand{std::forward<O>(o)} {}
998+
template <class X1, class O> constexpr attribute_action_expression(X1&& x1, O&& o) noexcept : unary_encoder_expression_interface<E1>{std::forward<X1>(x1)}, operand(std::forward<O>(o)) {}
984999

9851000
template <class M>
9861001
[[nodiscard]] constexpr auto operator()(encoder& d, M const& m) const

0 commit comments

Comments
 (0)