The following reduced testcase from PR 34950 gives an incorrect error after the
crashing bug in that PR is fixed:

-----
struct default_policy {};
template <class T = default_policy>
struct policy
{
    typedef int precision_type;
};
template <class Real, class Policy> struct precision {
    typedef Real type;
    typedef typename Policy::precision_type precision_type;
};
template <class T1, class T2, class Policy>
struct bessel_traits {
    typedef T1 result_type;
    typedef typename precision<result_type, Policy>::type precision_type;
};

template <class Fn>
void
def(char const* name, Fn fn);

template <class T1, class T2, class Policy>
typename bessel_traits<T1, T2, Policy>::result_type
cyl_bessel_j(T1 v, T2 x, const Policy& pol);

template <class T1, class T2>
typename bessel_traits<T1, T2, policy<> >::result_type
cyl_bessel_j(T1 v, T2 x);

void hedge_expose_polynomial()
{
    def("cyl_bessel_j", cyl_bessel_j<int, double>);
}
-----

We should recognize that the latter template is more specialized than the
former, and so the implicit address of cyl_bessel_j<int, double> is
unambiguous.


-- 
           Summary: gcc does not do partial ordering on overloaded address
                    resolution
           Product: gcc
           Version: 4.3.0
            Status: UNCONFIRMED
          Keywords: rejects-valid
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: jason at gcc dot gnu dot org
 BugsThisDependsOn: 34950


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35255

Reply via email to