http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60245
--- Comment #2 from Florent Hivert <florent.hivert at lri dot fr> --- Sorry ! The version I submitted is not the most reduced. Here is a version not using vectors: constexpr int Apply(const int in, int (*f)(const int&)) { return f(in); } using Foo = int; static constexpr int id(const Foo& i) { return i; } static constexpr int results1 = Apply(0, &id); Note: Replacing the Foo by int in the definition of id makes the problem vanish.