I'm primarily a Linux user who's been using vim for years, but when I started using Eclipse and then IntelliJ to develop for Android I realised how powerful an IDE can be. Fortunately most IDEs have decent vi emulation modes or plugins, otherwise I'm sure I'd find vim more productive overall. But for C++ I've come back to the vim fold, taking some time to study more of its features I was missing out on and getting used to the way it works with multiple "windows" (ie divisions within one GUI window), and especially setting up the youcompleteme plugin.
A lot of this is down to disappointment with XCode when I got a Mac. Most of the refactoring functionality isn't available for C++, I suppose it only works for Objective C or Swift. When using autocomplete on function calls it inserts arguments in non-valid C/C++ (Objective C again?) and has me fighting with it, although that could partly be down to a conflict with the XVim plugin. And there's no hint of being able to suggest corrections for errors like you get with the Java IDEs above.
A lot of this can be down to Java being more amenable than C++ to auto-detecting what you want to write, but I was wondering how MSVC compares. My experience of it is limited to checking whether some code I'd written on Linux would build with MSVC and run on Windows. That was before they freed up the full version, so I couldn't install a vi plugin and kept editing to a minimum. But I got the impression that, like XCode, it wasn't very flexible about coding style etc. Is it better than XCode for auto-completion and refactoring etc of C++? Does it only do those things as well as the Java IDEs if you're writing C#?
Vim's main weakness is its "QuickFix" list for jumping to compile-time errors; C++ can generate monster reports which are nigh impossible to follow in vim. But I only recently discovered the :copen command which I'm sure will help a lot. Having youcompleteme highlight most errors before I compile is a huge help too. But some errors can't easily be detected until the full build process due to template instantiation, and those tend to be the biggest monsters.