mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-28 14:24:43 +08:00
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:
parent
ce16861e68
commit
16eba92873
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
29
gcc/testsuite/g++.dg/template/koenig6.C
Normal file
29
gcc/testsuite/g++.dg/template/koenig6.C
Normal 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user