I am using syntastic in my c++11 project. When I am editing in vim, and save (:w) the syntastic plugin gives me errors on every initializer list {} and for each loops which are clearly c++11 features that it's missing.
I installed syntastic using pathogen.
Here are two examples of the error I am getting on initializer lists and for each loops (both c++11 that compile fine):
Turns out the C++ linter (syntax checker) of syntastic has many options that can be set on your .vimrc (unfortunate, I wish it was project specific, like the .clang_complete solution).
To enable c++11 standards and use the libc++ library with clang (which is what my project is using) I added the following lines to my ~/.vimrc
let g:syntastic_cpp_compiler = 'clang++' let g:syntastic_cpp_compiler_options = ' -std=c++11 -stdlib=libc++'
it now works beautifully.
I was facing the same problem and I insist to process c++98 and c++11 separately. below is my solution:
create file named gcc.vim under bundle/syntastic/syntax_checkers/cpp11/ and copy these to it:
"============================================================================ "File: cpp11.vim "Description: Syntax checking plugin for syntastic.vim "Maintainer: Gregor Uhlenheuer <kongo2002 at gmail dot com> "License: This program is free software. It comes without any warranty, " to the extent permitted by applicable law. You can redistribute " it and/or modify it under the terms of the Do What The Fuck You " Want To Public License, Version 2, as published by Sam Hocevar. " See http://sam.zoy.org/wtfpl/COPYING for more details. " "============================================================================ if exists('g:loaded_syntastic_cpp11_gcc_checker') finish endif let g:loaded_syntastic_cpp11_gcc_checker = 1 if !exists('g:syntastic_cpp11_compiler') let g:syntastic_cpp11_compiler = executable('g++') ? 'g++' : 'clang++' endif if !exists('g:syntastic_cpp11_compiler_options') let g:syntastic_cpp11_compiler_options = '-std=c++11' endif let s:save_cpo = &cpo set cpo&vim function! SyntaxCheckers_cpp11_gcc_IsAvailable() dict return executable(expand(g:syntastic_cpp11_compiler)) endfunction function! SyntaxCheckers_cpp11_gcc_GetLocList() dict return syntastic#c#GetLocList('cpp11', 'gcc', { \ 'errorformat': \ '%-G%f:%s:,' . \ '%f:%l:%c: %trror: %m,' . \ '%f:%l:%c: %tarning: %m,' . \ '%f:%l:%c: %m,'. \ '%f:%l: %trror: %m,'. \ '%f:%l: %tarning: %m,'. \ '%f:%l: %m', \ 'main_flags': '-x c++ -fsyntax-only', \ 'header_flags': '-x c++', \ 'header_names': '\m\.\(h\|hpp\|hh\)$' }) endfunction call g:SyntasticRegistry.CreateAndRegisterChecker({ \ 'filetype': 'cpp11', \ 'name': 'gcc' }) let &cpo = s:save_cpo unlet s:save_cpo " vim: set et sts=4 sw=4:
that will make gcc checker available (want other checker? you can do the similar things i did for yourself) for files with &filetype == 'cpp11' in vim. how to make your files automatically recongnized as cpp11 filetype in vim? just create file named ext_detect.vim under ~/.vim/ftdetect/ with the following content:
au bufnewfile,bufread *.cpp11 set ft=cpp11 au bufnewfile,bufread *.cppx set ft=cpp11
by this way, you can process your *.cpp files as c++98 standard and *.cpp11 or *.cppx as c++11 standard separately, not only syntax checking, but also syntax highlighting (if you need cpp11 syntax highlighting support, this vim plugin will be useful, although not perfect).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With