Пишите на стандартном ISO C++
Причина
Это набор руководящих принципов для написания стандартного ISO C++.
Примечание
Существуют среды, в которых необходимы расширения, например, для доступа к системным ресурсам. В таких случаях локализуйте использование необходимых расширений и контролируйте их использование с помощью не-основных стандартов кодирования. По возможности создавайте интерфейсы, которые инкапсулируют расширения, чтобы их можно было отключить или скомпилировать без них в системах, не поддерживающих эти расширения.
Расширения часто не имеют строго определённой семантики. Даже расширения, распространённые и реализованные несколькими компиляторами, могут иметь несколько различающееся поведение и поведение в пограничных случаях, непосредственно из-за отсутствия строгого стандартного определения. При достаточном использовании любого такого расширения ожидаемая переносимость пострадает.
Примечание
Использование допустимого ISO C++ не гарантирует переносимости (не говоря уже о корректности). Избегайте зависимости от неопределённого поведения (например, неопределённый порядок вычисления) и имейте в виду конструкции со значением, определяемым реализацией (например, sizeof(int)).
Примечание
Существуют среды, где необходимы ограничения на использование стандартных возможностей языка или библиотеки C++, например, для избегания динамического выделения памяти, как требуется стандартами программного обеспечения для управления самолётами. В таких случаях контролируйте их (не)использование с помощью расширения этих стандартов кодирования, адаптированного к конкретной среде.
Контроль
Используйте актуальный компилятор C++ (в настоящее время C++20 или C++17) с набором параметров, которые не принимают расширения. Рекомендуется -std=c++17 или -std=c++20.