mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-21 05:30:24 +08:00
re PR c++/13323 (Template code does not compile in presence of typedef)
PR c++/13323 * class.c (same_signature_p): Handle conversion operators correctly. (check_for_override): Likewise. PR c++/13323 * g++.dg/inherit/operator2.C: New test. From-SVN: r74370
This commit is contained in:
parent
9be6533af6
commit
a6c0d77224
@ -1,3 +1,10 @@
|
||||
2003-12-06 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/13323
|
||||
* class.c (same_signature_p): Handle conversion operators
|
||||
correctly.
|
||||
(check_for_override): Likewise.
|
||||
|
||||
2003-12-06 Kelley Cook <kcook@gcc.gnu.org>
|
||||
|
||||
* Make-lang.in (GXX_CROSS_NAME, CXX_CROSS_NAME): Delete.
|
||||
|
@ -1900,7 +1900,11 @@ same_signature_p (tree fndecl, tree base_fndecl)
|
||||
if (DECL_DESTRUCTOR_P (base_fndecl) || DECL_DESTRUCTOR_P (fndecl))
|
||||
return 0;
|
||||
|
||||
if (DECL_NAME (fndecl) == DECL_NAME (base_fndecl))
|
||||
if (DECL_NAME (fndecl) == DECL_NAME (base_fndecl)
|
||||
|| (DECL_CONV_FN_P (fndecl)
|
||||
&& DECL_CONV_FN_P (base_fndecl)
|
||||
&& same_type_p (DECL_CONV_FN_TYPE (fndecl),
|
||||
DECL_CONV_FN_TYPE (base_fndecl))))
|
||||
{
|
||||
tree types, base_types;
|
||||
types = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
|
||||
@ -2439,7 +2443,8 @@ check_for_override (tree decl, tree ctype)
|
||||
override a virtual function from a base class. */
|
||||
return;
|
||||
if ((DECL_DESTRUCTOR_P (decl)
|
||||
|| IDENTIFIER_VIRTUAL_P (DECL_NAME (decl)))
|
||||
|| IDENTIFIER_VIRTUAL_P (DECL_NAME (decl))
|
||||
|| DECL_CONV_FN_P (decl))
|
||||
&& look_for_overrides (ctype, decl)
|
||||
&& !DECL_STATIC_FUNCTION_P (decl))
|
||||
/* Set DECL_VINDEX to a value that is neither an INTEGER_CST nor
|
||||
|
@ -1,3 +1,8 @@
|
||||
2003-12-06 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/13323
|
||||
* g++.dg/inherit/operator2.C: New test.
|
||||
|
||||
2003-12-05 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/13305
|
||||
|
22
gcc/testsuite/g++.dg/inherit/operator2.C
Normal file
22
gcc/testsuite/g++.dg/inherit/operator2.C
Normal file
@ -0,0 +1,22 @@
|
||||
typedef int INT_TYPEDEF;
|
||||
|
||||
template<class T>
|
||||
class TypedIfc
|
||||
{
|
||||
public:
|
||||
virtual ~TypedIfc() { }
|
||||
virtual operator const T&() const = 0;
|
||||
virtual const T& operator= (const T& t) = 0;
|
||||
};
|
||||
|
||||
template<class Tnative>
|
||||
class NullIfc : public TypedIfc<Tnative>
|
||||
{
|
||||
public:
|
||||
const Tnative& operator= (const Tnative& t) { return t; }
|
||||
operator const Tnative&() const { return *(Tnative *)0; }
|
||||
};
|
||||
|
||||
typedef TypedIfc<INT_TYPEDEF> INT_TYPEDEFIfc;
|
||||
|
||||
NullIfc<int> i32;
|
Loading…
x
Reference in New Issue
Block a user