GCC: Patch to change default C++ dialect to C++14
gcc.gnu.org
gcc.gnu.org
Wouldn't it be more future proof just to FORCE everyone to have to specify which language version they're targeting? That way when a new one is added it has absolutely no impact on the historical ones.
It isn't like c++14 is going to be the last version ever.
PS - If GCC is still in use in 2098 then things may get awkward.
There is a thought.
I see a lot of trouble from this proposal because the compilers and supplied libraries have a history of including extra things. Until quiet recently C++ headers would drop in C that nobody asked for. Personally, I was surprised to find that on Windows I could throw std::runtime_error.
At the end of the day a lot of code would break, because nobody is sure exactly what standard they are actually are using.
I can't think of a weird combination of behaviors from extensions that would change semantics... maybe it's because I don't use that many extensions usually.
When I do they are related to type level programming and all they seem to affect is type inference.
Point being the same: Haskell as used is never quite standard Haskell.
In practice I haven't found this true.
Edit: Added a "can't" that was accidentally omitted...
alias c99="gcc --std=c99"
alias gc99="gcc --std=gnu99"
alias c++11="gcc --std=c++11"
alias g++11="gcc --std=gnu++11"
and so on to the compile distribution, and leave "gcc" and "g++" at their current defaults for legacy code. If the changes between the dialects are different enough to have compatibility issues, then it makes sense to actually treat them as different languages with different compilers. $ which c99
/usr/bin/c99
$ c99 --version
gcc (Gentoo Hardened 4.9.2 p1.5, pie-0.6.2) 4.9.2
[snip]Keeping strictness in the language allows for awesome tooling so I tried yesterday to find good IDE for C++14. There's not much on the market. Clion is decent but doesn't handle code completion for auto return type.
Clang does, so Atom code editor with clang based auto-complete plugin works better than Clion.
But I have luck for finding issues in the things I touch so I immediately encountered something that's not supported by clang autocomplete. It turned out of course that I'm not the first one to encounter this issue: https://llvm.org/bugs/show_bug.cgi?id=14446
Since it's hanging there since 2012 I understand it's a low priority issue. Could you give me any pointers of how could I help with implementing this feature? Maybe point me to files that I'd need to alter to attempt to implement this?
My personal opinion is to leave it the way it is - or at the very least default to C++11 first.
(I know, it doesn't work like that. 99.5% means syntax elements or some such, not lines of code. But it still works out the same in a medium-to-large code base; 99.5% compatibility breaks more than you expect.)
I've used both autoconf and cmake to do functional testing of which headers are available, and then include the most recent available out of <memory>, <tr1/memory> and <boost/shared_ptr.hpp>, bringing them into a project::compat namespace to make the codebase not need to care which is in use, and the same for a number of other tr1/boost types now in C++11/14.
I'm now at the point where for some projects I've been able to strip out this entirely and just use the C++11 types directly.
I don't understand why C++03 didn't just use the std:: namespace.
http://stackoverflow.com/questions/14131454/visual-studio-20...
For the Technical Specifications, we're following their header directory and namespace rules (<experimental/meow>).
What I ended up doing is something like this:
// Ensure that _LIBCPP_VERSION is defined if necessary
#include <ciso646>
#if defined(_LIBCPP_VERSION) || __cplusplus > 199711L
// C++11 or libc++
#include <memory>
using std::shared_ptr;
#else
// C++03 or libstdc++
#include <tr1/memory>
using std::tr1::shared_ptr;
#endifhttps://lkml.org/lkml/2014/10/19/94
That's why projects that use GCC or a compatible compiler should use the -std option to set the targeted standard and not rely on the default.
The world moves on. Though if you're an active project, moving along with the world is probably a better option than throwing in --std=c++really-old and deliberately refusing to use new stuff.
GCC has already been getting steadily more strict by default, or at least opt-in with -Wall -Werror. The last time we updated our build environment, we had to go in and #include all the headers that were formerly implicit (or #include-d by other headers), and add in the 'const' every time we referred to a string literal. The possibly-unassigned variable checker also got a lot more sophisticated and now would enter called functions.
Doing all those checks at build time is slowing the build down too.
At least with clang, -Weverything is not measurably slower than no warnings at all on any vaguely realistic code base.
With regard to speed, I just know that tcc is 10 times faster than gcc, and that makes a huge difference to me. Anything pointless is really irritating because I know how slow gcc is.
(Also I'd much rather have fast binaries slowly compiled than the opposite)
(I would rather a fast compiler until I am ready to release a final product and then swap. I probably do more cross compiling and creating custom toolchains than you.)