diff options
Diffstat (limited to 'gcc/testsuite/g++.dg')
-rw-r--r-- | gcc/testsuite/g++.dg/init/member1.C | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/static13.C | 14 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/static14.C | 13 |
3 files changed, 31 insertions, 1 deletions
diff --git a/gcc/testsuite/g++.dg/init/member1.C b/gcc/testsuite/g++.dg/init/member1.C index 1c89d5a1d43..aededf23e7b 100644 --- a/gcc/testsuite/g++.dg/init/member1.C +++ b/gcc/testsuite/g++.dg/init/member1.C @@ -11,8 +11,11 @@ template<int> struct B {}; template<typename T> struct C { static const int i = A<T>::i; // { dg-error "incomplete" } - static const int j = i; // { dg-error "initialized by a non-const" } + static const int j = i; B<j> b; // { dg-error "not a valid template arg" } }; C<int> c; + +int i = C<int>::i; +int j = C<int>::j; diff --git a/gcc/testsuite/g++.dg/template/static13.C b/gcc/testsuite/g++.dg/template/static13.C new file mode 100644 index 00000000000..c43f5554739 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/static13.C @@ -0,0 +1,14 @@ +// PR c++/23099 + +struct Base { + int x; +}; + +template <typename T> +struct A { + static const int N = sizeof(static_cast<Base*>(T())); +}; + +struct Derived : Base { + A<Derived*> a; +}; diff --git a/gcc/testsuite/g++.dg/template/static14.C b/gcc/testsuite/g++.dg/template/static14.C new file mode 100644 index 00000000000..5bc0e731ac3 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/static14.C @@ -0,0 +1,13 @@ +struct Base { + int x; +}; + +template <typename T> +struct A { + static const int N = sizeof(static_cast<Base*>(T())); + int a[N]; +}; + +struct Derived : Base { + A<Derived*> a; +}; |