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()