For what it is worth, in the last release of Teensyduino (current version in board manager) the Teensy boards (PJRC) were updated from C++14 (If I remember correctly) to C++17 over a reasonably long beta cycle. During that beta cycle there were several things that needed to be updated:
Some were simply updates to remove compiler warnings. Side note: I wish more developers worked to eliminating compiler warnings. Often times we get anesthetized by constantly seeing
pages of warnings, that we miss seeing the important ones.
But there were several other changes that were needed to fix things that no longer worked. Things like object constructors which were declared constexpr, that worked as desired on c++14 but worked differently with the c++17.
In particular the goal was to have the class completely configured/initialized without needing any code needed to be run... i.e. the object is not in the list of objects who need to be called at startup time...
Why that was important, was things like suppose: you have another class whose constructor refers to these classes, like for a hardware Serial port, or a Wire object or the like. And for example, calls Wire.begin(...) as part of it's constructor, but the Wire class had not been initialized, and for example does not have it's const pointer to it's hardware details set...
The code was working fine with 14, but 17, changed the rules (or some implementation about some gray area changed) in regard to this.
In this case, it had to do with assigning a const pointer in the constructor initializer list
Which in the C14 in some case it had simply assigned the value to the memory image as desired, but with C17 it changed and run time code was called... Had to do with how things were cast in the constructor. Fixed by using data type uintptr_t...
The exact details are not that important to this discussion.
But the main thing is, that simply changing a setting such as this, can end up creating
seemingly random bugs like crashes, that appear to be completely random. In the above like case
you would only run into it, if your constructor happened to reference some other object which expects that all of their critical data was setup, and the referring object happens to be in the list of objects (stuff that __libc_init_array() ) before the object it refers to.
So please don't go globally changing, settings such as this, without going through some form of large-scale testing and some form of beta cycle... But as individual users, who desire such changes, go for it! If enough people request such an update and there is a lot of positive outcomes it probably makes it more likely that different boards will update to the newer stuff stuff.