I would recommend against trying to use anything from C++14 until you're very sure of what you're doing. As for C++11, support for it is still not 100%.
Think of C++11 (or any of the other standards that go above and beyond the "original" language specification) as being a shopping list. A really, really fucking long one. And rather than spending 10 years checking off every single item on the list before delivering a single one of them to their customers, compiler developers (including Microsoft, Apple, GNU; everyone!) has released "stable" / "production" releases of their compilers with partial support for, say, C++11.
Partial support may mean that they support -- if the list is 100 items long -- two or three items, or 30, or 99. That 100th feature demanded by the spec may not get implemented until the year 2035, if it requires such a fundamental change to the compiler that they can't implement it easily now.
Hell, even the latest release of the most widely used C++ compilers (Microsoft C++, GNU C++, and Clang++) are still working on the last vestiges of support for the 2003 standard of C++.
Meaning, the stuff that was easy to do got done in 2003; the stuff that required some thought was released no later than 2005-2006; the really hard shit was out in the 2010s; and the ridiculously painful features are still not supported.
So, if you're reading a specification document, say, the C++11 spec, and you see some feature in it, and your compiler's author boldly claims "C++11 support!" -- don't assume that (1) the feature is there, or (2) that it's working properly.
(Yes, even if your compiler version is supposedly "stable".)
That said, the "older" the feature, the more likely it is to work.
New just means compiler authors have had less time to work on it, so there's inherently higher risk there that it won't be available, or won't work right.
My last tip: in order to broaden your awareness about general issues in the C/C++ landscape, and to become familiar with what will and will not work across compilers/platforms, you should frequently attempt to recompile your code on another platform and compiler.
Even if you do something as simple as run an Ubuntu VM, and use g++
to compile your code every once in a while (after successfully getting it to work on Microsoft C++), you'll learn a lot about portability issues.
A lot of portability issues go beyond the language spec, of course. Things like system calls. The core C library. The filesystem. Error handling. Exceptions. Debugging. Processes. Network sockets. I/O. File descriptors. GUIs. A lot of shit is different between operating systems. The differences are most obvious between Windows and non-Windows OSes, but even relative close cousins like OS X and BSD have many differences.