// { dg-do compile { target c++11 } } // { dg-options -Wabi=10 } struct [[gnu::abi_tag ("foo")]] A { template static T f(); template static A g(); }; template struct B { static decltype(A::f()) fa(decltype(A::f())); static decltype(A::f()) fv(); // { dg-warning "mangled name" } static decltype(A::g()) ga(decltype(A::g())); static decltype(A::g()) gv(); template static decltype(A::f()) hv(); }; int main() { B::fa(0); // { dg-final { scan-assembler "_ZN1BIiE2faEi" } } B::fv(); // { dg-final { scan-assembler "_ZN1BIiE2fvEv" } } B::ga(A()); // { dg-final { scan-assembler "_ZN1BIiE2gaE1AB3foo" } } B::gv(); // { dg-final { scan-assembler "_ZN1BIiE2gvB3fooEv" } } B::hv(); // { dg-final { scan-assembler "_ZN1BIiE2hvIiEEDTclsr1AB3foo1fIT_EEEv" } } }