diff options
author | Giovanni Bajo <giovannibajo@gcc.gnu.org> | 2003-12-18 12:00:08 +0000 |
---|---|---|
committer | Giovanni Bajo <giovannibajo@gcc.gnu.org> | 2003-12-18 12:00:08 +0000 |
commit | 51287c1498c0fad7f7a794e4b170d229ecfce295 (patch) | |
tree | 5a2011429c610954669d35a7c112d14e1d1c9a73 /gcc | |
parent | 4d5297fad469676a2ac36f512fdcc6ef9eb7e251 (diff) | |
download | gcc-51287c1498c0fad7f7a794e4b170d229ecfce295.zip gcc-51287c1498c0fad7f7a794e4b170d229ecfce295.tar.gz gcc-51287c1498c0fad7f7a794e4b170d229ecfce295.tar.bz2 |
re PR c++/9154 (poor error message for ">>" vs. "> >" for nested template args)
PR c++/9154
* g++.dg/template/error10.C: New test.
From-SVN: r74777
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/error10.C | 70 |
2 files changed, 75 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3d937c2..d4524f3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-12-18 Giovanni Bajo <giovannibajo@gcc.gnu.org> + + PR c++/9154 + * g++.dg/template/error10.C: New test. + 2003-12-18 Eric Botcazou <ebotcazou@libertysurf.fr> * g++.dg/eh/simd-1.C: XFAIL on SPARC. diff --git a/gcc/testsuite/g++.dg/template/error10.C b/gcc/testsuite/g++.dg/template/error10.C new file mode 100644 index 0000000..a25c4bb --- /dev/null +++ b/gcc/testsuite/g++.dg/template/error10.C @@ -0,0 +1,70 @@ +// { dg-do compile } +// Origin: <tilps at hotmail dot com> +// c++/9154: poor error message for ">>" vs "> >" in template argument list + + +/* + * Test that the error message is issued properly + */ +template <class T> +class A {}; + +A<A<int>> blah; // { dg-error "should be `> >' within" } +A<int>> blah2; // { dg-error "spurious `>>'" } + + +/* + * Test that a few valid constructs containing a ">>" token in a + * template argument list are handled correctly. + */ +template <int N> +void B(void) {} + +int Btest() +{ + B<256 >> 4>(); +} + +template <int N = 123>>4> +struct C {}; + +template <int> struct D {}; +template <typename> struct E {}; + +E<D< 1>>2 > > E1; + +const int x = 0; +E<D< 1>>x > > E2; + +template <int> struct F { + typedef int I; +}; + +template <typename T = F< 1>>2 >::I> +struct G {}; + +/* + * In this special case, a valid type-id (H() is a function type) is followed + * by '>>', but the argument should still be parsed as an expression, which + * will then be rejected as non-constant expression. + */ +struct H +{ + int operator >>(int); +}; + +template <int V> struct L {}; +L<H() >> 5> l; // { dg-error "" "non-constant" } + + +/* + * This case used to not emit the nice error message because of a typo + * in the code. + */ +template <void (*)(void)> +struct K {}; + +void KFunc(void); + +A<K<&KFunc>> k1; // { dg-error "should be `> >' within" } +K<&KFunc>> k2; // { dg-error "spurious `>>'" } |