// { dg-do run } // Copyright (C) 1999 Free Software Foundation, Inc. // Contributed by Nathan Sidwell 21 Nov 1999 <nathan@acm.org> // make sure __FUNCTION__ and __PRETTY_FUNCTION__ work in templates #include <stdio.h> #include <string.h> static bool bad = false; template<class T> void f1 (T) { char const *function = __FUNCTION__; char const *pretty = __PRETTY_FUNCTION__; printf ("generic\n"); printf ("__FUNCTION__ %s\n", function); printf ("__PRETTY_FUNCTION__ %s\n", pretty); if (strcmp (function, "f1")) bad = true; if (strcmp (pretty, "void f1(T) [with T = float]")) // only for float instantiation bad = true; } template<> void f1<int> (int) { char const *function = __FUNCTION__; char const *pretty = __PRETTY_FUNCTION__; printf ("specialized\n"); printf ("__FUNCTION__ %s\n", function); printf ("__PRETTY_FUNCTION__ %s\n", pretty); if (strcmp (function, "f1<int>")) bad = true; if (strcmp (pretty, "void f1(T) [with T = int]")) bad = true; } int main () { f1(0); // f1<int> f1(0.0f); // f1<float> return bad; }