http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56095

--- Comment #1 from Rendaw <spoo at zarbosoft dot com> 2013-01-24 06:39:12 UTC 
---
I tried one more case, casting before using the template:

Code (c.cxx):
int *a(void) { return 0; }
typedef void (*IntermediarySignature)(void);
template <IntermediarySignature b> void z(void) {}

int main(int argc, char **argv)
{
    constexpr IntermediarySignature c = (IntermediarySignature)a;
    z<c>();
    return 0;
}

4.7 output:
> g++-4.7 -std=c++11 c.cxx 
c.cxx: In function ‘int main(int, char**)’:
c.cxx:8:7: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.7/README.Bugs> for instructions.
Preprocessed source stored into /tmp/ccw2QOq9.out file, please attach this to
your bugreport.

4.6 output:
> g++ -std=c++0x c.cxx 
c.cxx: In function ‘int main(int, char**)’:
c.cxx:8:7: error: ‘(IntermediarySignature)a’ is not a valid template argument
for type ‘void (*)()’ because function ‘#‘nop_expr’ not supported by
dump_decl#<declaration error>’ has not external linkage
c.cxx:8:7: error: no matching function for call to ‘z()’
c.cxx:8:7: note: candidate is:
c.cxx:3:41: note: template<void (* b)()> void z()

Reply via email to