Let us assume we have the following code:
struct MyStruct
{
double height, width;
};
int main()
{
const MyStruct a { 5.1, 2.3 };
const MyStruct b { .height = 3.5, .width = 1.8 };
return 0;
}
Since C++20 we have Designated Initializers, which means we can use syntax like { .height = 3.5, .width = 1.8 }. Now, if the internal order of fields height and width changes, then { 5.1, 2.3 } still works (even though it's incorrect now). Whereas { .height = 3.5, .width = 1.8 } fails to compile, which requires us to correct the initialization order.
So I was wondering, if there were any compiler flags (in g++ or msvc) to warn about the usage of non-designated initializers like { 5.1, 2.3 }? This could help identify cases, where the internal order was switched without updating (or incorrectly updating) usages elsewhere in a library.