ipa-cp: Perform operations in the appropriate types (PR 118097)
[gcc.git] / gcc / testsuite / g++.dg / template / non-dependent16b.C
blobb0d1bbe985a0f19840662c73be59be2d27921a17
1 // Like non-dependent16a.C, but where A is a template.
3 // { dg-do compile { target c++11 } }
5 template<class...>
6 struct A {
7   template<class T> static void f();
8   template<class T> static auto f() -> decltype(f<void>(), 1, *T());
9   template<class T> static auto f() -> decltype(f<void>(), 2, *T());
10   template<class T> static auto f() -> decltype(f<void>(), 3, *T());
11   template<class T> static auto f() -> decltype(f<void>(), 4, *T());
12   template<class T> static auto f() -> decltype(f<void>(), 5, *T());
13   template<class T> static auto f() -> decltype(f<void>(), 6, *T());
14   template<class T> static auto f() -> decltype(f<void>(), 7, *T());
15   template<class T> static auto f() -> decltype(f<void>(), 8, *T());
16   template<class T> static auto f() -> decltype(f<void>(), 9, *T());
17   template<class T> static auto f() -> decltype(f<void>(), 10, *T());
18   template<class T> static auto f() -> decltype(f<void>(), 11, *T());
19   template<class T> static auto f() -> decltype(f<void>(), 12, *T());
20   template<class T> static auto f() -> decltype(f<void>(), 13, *T());
21   template<class T> static auto f() -> decltype(f<void>(), 14, *T());
22   template<class T> static auto f() -> decltype(f<void>(), 15, *T());
23   template<class T> static auto f() -> decltype(f<void>(), 16, *T());
24   template<class T> static auto f() -> decltype(f<void>(), 17, *T());
25   template<class T> static auto f() -> decltype(f<void>(), 18, *T());
26   template<class T> static auto f() -> decltype(f<void>(), 19, *T());
27   template<class T> static auto f() -> decltype(f<void>(), 20, *T());
28   template<class T> static auto f() -> decltype(f<void>(), 21, *T());
29   template<class T> static auto f() -> decltype(f<void>(), 22, *T());
30   template<class T> static auto f() -> decltype(f<void>(), 23, *T());
31   template<class T> static auto f() -> decltype(f<void>(), 24, *T());
32   template<class T> static auto f() -> decltype(f<void>(), 25, *T());
35 int main() {
36   A<>::f<void>();