Hi, This bugs only occurs when we assign lambda expression as default arguments in C++. I know there are better ways of using lambda but I was just playing with both C++ and Emacs on a hobby project. Consider this C++ code: template void bubble_sort(std :: vector &v, bool cmp(T, T)=[](T a, T b){return a < b;}) { bool swapped = true; for(size_t i = 0; i < v.size() && swapped; i++) { swapped = false; for(size_t j = 0; j < v.size()-i; j++){ if(cmp(v[j+1], v[j])) { std::swap(v[j], v[j+1]); swapped=true; } } } } Here cmp takes a lambda as default argument and if in c++-mode if we try using C-M-e(c-end-of-defun) it will get trapped into lambda. To solve this is added c-forward-to-nth ((memq where '(at-function-end outwith-function at-header in-header)) (when (c-syntactic-re-search-forward "{" nil 'eob) (backward-char) (forward-sexp) ;; continue to move sexp if we are looking ) and , (while (looking-at ")\\|,") (c-syntactic-re-search-forward "{" nil 'eob) (backward-char) (forward-sexp)) (setq n (1- n)))) By this I am trying to move forward lambda's which are separated by ',' or ended with ')'. I will also attaching the necessary diff to support the issue. -- Utkarsh Singh