mirror of
https://github.com/boostorg/phoenix.git
synced 2026-02-02 21:12:13 +00:00
Fix result type deduction failure.
In some cases, result type deduction is failed due to specialization
restricts to const cv-ref even though doesn't change it.
```
const char X = 'x';
phx::find(boost::as_literal("fox"), arg1)(X); // works
char X = 'x';
phx::find(boost::as_literal("fox"), arg1)(X); // should be accepted, but...
```
This commit is contained in:
@@ -40,7 +40,7 @@ namespace boost { namespace phoenix {
|
||||
struct result;
|
||||
|
||||
template <typename This, class R, class T>
|
||||
struct result<This(R&, T const&)>
|
||||
struct result<This(R&, T&)>
|
||||
: range_iterator<R>
|
||||
{};
|
||||
|
||||
@@ -202,7 +202,7 @@ namespace boost { namespace phoenix {
|
||||
struct result;
|
||||
|
||||
template <typename This, class R, class T>
|
||||
struct result<This(R&, T const&)>
|
||||
struct result<This(R&, T&)>
|
||||
: range_difference<R>
|
||||
{};
|
||||
|
||||
@@ -314,12 +314,12 @@ namespace boost { namespace phoenix {
|
||||
struct result;
|
||||
|
||||
template <typename This, class R, class T>
|
||||
struct result<This(R&, T const&)>
|
||||
struct result<This(R&, T&)>
|
||||
: range_iterator<R>
|
||||
{};
|
||||
|
||||
template <typename This, class R, class T, class C>
|
||||
struct result<This(R&, T const&, C)>
|
||||
struct result<This(R&, T&, C)>
|
||||
: range_iterator<R>
|
||||
{};
|
||||
|
||||
@@ -358,12 +358,12 @@ namespace boost { namespace phoenix {
|
||||
struct result;
|
||||
|
||||
template <typename This, class R, class T>
|
||||
struct result<This(R&, T const&)>
|
||||
struct result<This(R&, T&)>
|
||||
: range_iterator<R>
|
||||
{};
|
||||
|
||||
template <typename This, class R, class T, class C>
|
||||
struct result<This(R&, T const&, C)>
|
||||
struct result<This(R&, T&, C)>
|
||||
: range_iterator<R>
|
||||
{};
|
||||
|
||||
@@ -414,12 +414,12 @@ namespace boost { namespace phoenix {
|
||||
struct result;
|
||||
|
||||
template <typename This, class R, class T>
|
||||
struct result<This(R&, T const&)>
|
||||
struct result<This(R&, T&)>
|
||||
: result_of::equal_range<R,T>
|
||||
{};
|
||||
|
||||
template <typename This, class R, class T, class C>
|
||||
struct result<This(R&, T const&, C)>
|
||||
struct result<This(R&, T&, C)>
|
||||
: result_of::equal_range<R,T, C>
|
||||
{};
|
||||
|
||||
|
||||
@@ -158,7 +158,7 @@ namespace boost { namespace phoenix { namespace impl
|
||||
struct result;
|
||||
|
||||
template<typename This, class R, class O, class T, class T2>
|
||||
struct result<This(R&, O, T const&, T2 const&)>
|
||||
struct result<This(R&, O, T&, T2&)>
|
||||
: detail::decay_array<O>
|
||||
{};
|
||||
|
||||
@@ -176,7 +176,7 @@ namespace boost { namespace phoenix { namespace impl
|
||||
struct result;
|
||||
|
||||
template<typename This, class R, class O, class P, class T>
|
||||
struct result<This(R&, O, P, T const&)>
|
||||
struct result<This(R&, O, P, T&)>
|
||||
: detail::decay_array<O>
|
||||
{};
|
||||
|
||||
@@ -238,7 +238,7 @@ namespace boost { namespace phoenix { namespace impl
|
||||
struct result;
|
||||
|
||||
template<typename This, class R, class T>
|
||||
struct result<This(R&, T const&)>
|
||||
struct result<This(R&, T&)>
|
||||
: range_iterator<R>
|
||||
{
|
||||
};
|
||||
|
||||
@@ -94,7 +94,7 @@ namespace boost { namespace phoenix
|
||||
, typename C
|
||||
, typename Arg1
|
||||
>
|
||||
struct result<This(C&, Arg1 const &)>
|
||||
struct result<This(C&, Arg1&)>
|
||||
{
|
||||
typedef typename add_reference<C>::type type;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user