// PR c++/17470 // Test that we can give visibility to explicit template instantiations // { dg-require-visibility "" } // { dg-final { scan-hidden "_ZN1AIlE1fEl" } } // { dg-final { scan-hidden "_ZN1AIiE1fEi" } } // { dg-final { scan-not-hidden "_ZN1AIcE1fEc" } } // { dg-final { scan-hidden "_Z8identityIdET_S0_" } } // { dg-final { scan-not-hidden "_Z8identityIiET_S0_" } } template T identity(T t) { return t; } template __attribute__((visibility("hidden"))) double identity(double); template int identity(int); template struct A { void f (T); }; template void A::f (T) { } template struct __attribute ((visibility ("hidden"))) A; template<> struct __attribute ((visibility ("hidden"))) A { void f(long); }; // inherits hidden visibility from its class void A::f (long) { } template struct A;