diff options
author | Mark Mitchell <mark@codesourcery.com> | 2004-10-28 20:53:04 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2004-10-28 20:53:04 +0000 |
commit | 883a2bff66fbcba913f3c21427a0551d8624dc6b (patch) | |
tree | d67de648c09e8c1810110d9aea2eda23c21b75cc /gcc/testsuite | |
parent | 40aea05cfa9feadb1fb46bca2992b905ebdcba74 (diff) | |
download | gcc-883a2bff66fbcba913f3c21427a0551d8624dc6b.zip gcc-883a2bff66fbcba913f3c21427a0551d8624dc6b.tar.gz gcc-883a2bff66fbcba913f3c21427a0551d8624dc6b.tar.bz2 |
re PR c++/17132 (GCC fails to eliminate function template specialization when argument deduction fails)
PR c++/17132
* pt.c (instantiate_class_template): Increment
processing_template_decl when substituting into a member class
template.
PR c++/17132
* g++.dg/template/memclass3.C: New test.
From-SVN: r89778
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/memclass3.C | 39 |
2 files changed, 44 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7b1378a..556d330 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-10-28 Mark Mitchell <mark@codesourcery.com> + + PR c++/17132 + * g++.dg/template/memclass3.C: New test. + 2004-10-28 Adam Nemet <anemet@lnxw.com> PR middle-end/18160 diff --git a/gcc/testsuite/g++.dg/template/memclass3.C b/gcc/testsuite/g++.dg/template/memclass3.C new file mode 100644 index 0000000..8230b94 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/memclass3.C @@ -0,0 +1,39 @@ +// PR c++/17132 + +template <typename T> +struct has_deref +{ + struct impl + { + template < + typename Type, + typename Type::reference (Type::*Func)(void) const> + struct func_tag; + + template <typename Type> + static char (& test( + Type *, + func_tag<Type, &Type::operator*> * = 0 + ))[2]; + static char test(void *); + }; + + static const bool value = (sizeof(impl::test((T *) 0)) == 2); +}; + +template <typename T> +struct container +{ + struct iterator + { + typedef T & reference; + reference operator*() const; + }; +}; + +int main() +{ + typedef container<int>::iterator iter; + int result = has_deref<iter>::value; + return result; +} |