This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
can't pass pointers to template functions as arguments
- To: egcs-bugs at egcs dot cygnus dot com
- Subject: can't pass pointers to template functions as arguments
- From: Vaclav Barta <vbar at comp dot cz>
- Date: Sat, 10 Jul 1999 11:07:07 +0000
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/