Fortran: Fix PR 47485.
[gcc.git] / gcc / testsuite / g++.dg / cpp0x / alias-decl-79a.C
blob151b8487e1f52833899c759dbaa0659d456c3322
1 // A version of alias-decl-79.C where defining-type-id of B and C
2 // are not dependent and instead their vector_size attribute is.
3 // PR c++/115897
4 // { dg-do compile { target c++11 } }
6 template<class T, class U>
7 struct is_same { static constexpr bool value = __is_same(T, U); };
9 #if __cpp_variable_templates
10 template<class T, class U>
11 constexpr bool is_same_v = __is_same(T, U);
12 #endif
14 template<class T> struct A;
16 template<int N>
17 void f() {
18   using T = float;
19   using B [[gnu::vector_size(N * sizeof(float))]] = T;
20   static_assert(!is_same<T, B>::value, "");
21   static_assert(!is_same<A<T>, A<B>>::value, "");
22 #if __cpp_variable_templates
23   static_assert(!is_same_v<T, B>, "");
24   static_assert(!is_same_v<A<T>, A<B>>, "");
25 #endif
28 template<int N>
29 void g() {
30   using T = float*;
31   using C [[gnu::vector_size(N * sizeof(float*))]] = T;
32   static_assert(!is_same<T*, C>::value, "");
33   static_assert(!is_same<A<T*>, A<C>>::value, "");
34 #if __cpp_variable_templates
35   static_assert(!is_same_v<T*, C>, "");
36   static_assert(!is_same_v<A<T*>, A<C>>, "");
37 #endif
40 template void f<4>();
41 template void g<4>();