re PR c++/38850 (Cannot find inline friend function in template class when called from within a template function)

PR c++/38850
        * pt.c (tsubst_copy_and_build): Tell finish_call_expr to
        accept hidden friends.

From-SVN: r143422
This commit is contained in:
Jason Merrill 2009-01-16 00:04:26 -05:00 committed by Jason Merrill
parent ce16861e68
commit 16eba92873
4 changed files with 44 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2009-01-15 Jason Merrill <jason@redhat.com>
PR c++/38850
* pt.c (tsubst_copy_and_build): Tell finish_call_expr to
accept hidden friends.
2009-01-15 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR C++/29388

View File

@ -11400,9 +11400,12 @@ tsubst_copy_and_build (tree t,
/*fn_p=*/NULL,
complain));
}
/* Pass true for koenig_p so that build_new_function_call will
allow hidden friends found by arg-dependent lookup at template
parsing time. */
return finish_call_expr (function, call_args,
/*disallow_virtual=*/qualified_p,
koenig_p,
/*koenig_p*/true,
complain);
}

View File

@ -1,3 +1,8 @@
2009-01-15 Jason Merrill <jason@redhat.com>
PR c++/38850
* g++.dg/template/koenig6.C: New test.
2009-01-15 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR C++/29388

View File

@ -0,0 +1,29 @@
// PR c++/38850
template <typename VType>
class Vector2 {
private:
VType c_[2];
public:
typedef Vector2<VType> Self;
Vector2(const VType x, const VType y) {
c_[0] = x;
c_[1] = y;
}
friend inline Self Max(const Self &v1, const Self &v2) {
return Self(v1.c_[0], v1.c_[1]);
}
};
template <class T>
Vector2<float> foo(T x) {
Vector2<float> y(0,0);
return Max(y, y);
}
int main() {
foo(3);
return 0;
}