1// PR c++/31923 2// C++ DR 605 -- "...the linkage of an explicit specialization must be that of 3// the template." 4 5// { dg-require-weak "" } 6// { dg-do compile { target i?86-*-* x86_64-*-* } } 7 8template<class T> 9static void f1 (T) { } 10 11// { dg-final { scan-assembler-not ".glob(a|)l\[\t \]*_?_Z2f1IfEvT_" } } 12template<> 13void f1<float> (float) { } // Expected to have static linkage 14 15template<class T> 16void f2 (T) { } 17 18// { dg-final { scan-assembler ".glob(a|)l\[\t \]*_?_Z2f2IfEvT_" } } 19template<> 20void f2<float> (float) { } // Expected to have global linkage 21 22void instantiator () 23{ 24 // { dg-final { scan-assembler-not ".glob(a|)l\[\t \]*_?_Z2f1IiEvT_" } } 25 f1(0); // Expected to have static linkage 26 27 // { dg-final { scan-assembler ".weak(_definition)?\[\t \]*_?_Z2f2IiEvT_" { target { ! { *-*-mingw* *-*-cygwin } } } } } 28 f2(0); // Expected to have weak global linkage 29} 30