1 // { dg-do compile { target c++11 } }
2 // { dg-options "-fabi-version=9 -Wabi" }
3 
4 struct [[gnu::abi_tag ("foo")]] A
5 {
6   template <class T> static T f();
7   template <class T> static A g();
8 };
9 
10 template <class T> struct B
11 {
12   static decltype(A::f<T>()) fa(decltype(A::f<T>()));
13   static decltype(A::f<T>()) fv();
14   static decltype(A::g<T>()) ga(decltype(A::g<T>()));
15   static decltype(A::g<T>()) gv(); // { dg-warning "mangled name" }
16   template <class U>
17   static decltype(A::f<U>()) hv();
18 };
19 
main()20 int main()
21 {
22   B<int>::fa(0);     // { dg-final { scan-assembler "_ZN1BIiE2faEi" } }
23   B<int>::fv();	     // { dg-final { scan-assembler "_ZN1BIiE2fvEv" } }
24   B<int>::ga(A());   // { dg-final { scan-assembler "_ZN1BIiE2gaE1AB3foo" } }
25   B<int>::gv();	     // { dg-final { scan-assembler "_ZN1BIiE2gvEv" } }
26   B<int>::hv<int>(); // { dg-final { scan-assembler "_ZN1BIiE2hvIiEEDTclsr1AB3foo1fIT_EEEv" } }
27 }
28