This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

can't pass pointers to template functions as arguments


Hi,

I want to templatize a conversion from exception-throwing function
to error-returning function. But, when I try to instantiate my
function template by passing the function name as a parameter of
another function, egcs crashes. I'm not quite sure what I'm trying
to do is legal, but even if it isn't, the compiler should IMHO say
so.

=== preprocessed source (safecall.ii) ===
# 1 "safecall.cc"
template <typename TReturn,
    TReturn (*ThrowingFunction)(),
    TReturn ErrorCode = TReturn()>
TReturn SafeCall()
{
    try
    {   return ThrowingFunction();
    }
    catch (...)
    {   return ErrorCode;
    }
}

int Callback()
{
    return 1;
}

int LibraryFunction(int (*p)())
{
    return p();
}

int main()
{
    return LibraryFunction(SafeCall<int, Callback>);
}




=== compilation output ===
gcc -v --save-temps safecall.cc
Reading specs from
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/egcs-2.91.66/specs
gcc version egcs-2.91.66 19990314 (egcs-1.1.2 release)
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/egcs-2.91.66/cpp -lang-c++ -v
-undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=91
-D__ELF__ -Dunix -Di386 -D__i386__ -Dlinux -D__ELF__ -D__unix__
-D__i386__ -D__i386__ -D__linux__ -D__unix -D__i386 -D__linux
-Asystem(posix) -D__EXCEPTIONS -Asystem(unix) -Acpu(i386)
-Amachine(i386) -Di386 -D__i386 -D__i386__ -Di686 -Dpentiumpro -D__i686
-D__i686__ -D__pentiumpro -D__pentiumpro__ safecall.cc safecall.ii
GNU CPP version egcs-2.91.66 19990314 (egcs-1.1.2 release) (i386
Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include/g++
 /usr/local/include
 /usr/local/i686-pc-linux-gnu/include
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/egcs-2.91.66/include
 /usr/include
End of search list.
 /usr/local/lib/gcc-lib/i686-pc-linux-gnu/egcs-2.91.66/cc1plus
safecall.ii -quiet -dumpbase safecall.cc -version -o safecall.s
GNU C++ version egcs-2.91.66 19990314 (egcs-1.1.2 release)
(i686-pc-linux-gnu) compiled by GNU C version egcs-2.91.66 19990314
(egcs-1.1.2 release).
safecall.cc: In function `int main()':
safecall.cc:26: Internal compiler error 980715.
safecall.cc:26: Please submit a full bug report to
`egcs-bugs@egcs.cygnus.com'.
safecall.cc:26: See <URL:http://egcs.cygnus.com/faq.html#bugreport> for
details.




P.S. I don't read the list, so I appreciate responses via e-mail.

	Bye
		Vasek
--
I have a web spider, too!
http://www.locus.cz/linkcheck/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]