Я пользуюсь гитом через различные GUI и делаю любые сложные действия произвожу легко и непринуждённо.
В то время как коллеги мучаются с командами из консоли.
В консоли тоже периодически бывает работаю с гитом и для этого очень советую oh-my-zsh или oh-my-posh.
Так компилятор же вам и сообщает в вашем примере, что что-то не то:
(5): warning C4305: 'initializing': truncation from 'unsigned __int64' to 'short'
<source>(5): warning C4309: 'initializing': truncation of constant value
</code>
Мы ведь не игнорируем предупреждения компилятора, не так ли ? ;)
Конечно в коде не будет так, а будет макрос "_countof", который и проверяет тип на массив.
Легко сказать, что нужно приведение типа каждый раз, но это банально неудобно.
Вот бы было указано в стандарте, что std::array должен быть двоично идентичен C-array тогда можно было бы использовать std::array не боясь неправильного размещения в памяти.
А так его можно использовать только там где это не критично.
Кстати, у std::array есть ещё одна неприятная особенность.
std::array::size имеет тип size_t, а sizeof(a)/sizeof(a[0]) это константа, которую компилятор легко превращает в нужный тип.
Итого в MSVC получаем предуреждение об усечении типа:
std::array<int, 1> a;
short size_a = a.size(); // warning C4267: 'initializing': conversion from 'size_t' to 'short', possible loss of data
int b[1];
short size_b = sizeof(b)/sizeo(b[0]); // OK
С UnsafeBinaryFormatterSerialization=false нужно быть острожным.
Внезапно продукты MS (хе-хе) не работают без него. Т.е. всё собирается без проблем но падает самым непредсказуемым образом: github.com/PowerShell/PowerShell/issues/14054
Ну если ломать API и жизнь всем пользователям то можно рефакторить и поделить на части с зависимостями от WinForms и без.
Но это радикальный шаг, а хотелось решения без изменения кода.
Являясь обладателем Zenbook Duo, могу сказать, что клавиатура очень комфортная для работы и тачпэд справа вполне полноценная замена мыши.
Конечно отсутствие клавиш Home/End плохо, но это, увы, тренд :(
И ещё в копилку: https://jkorpela.fi/chars/spaces.html
Если интересует способ сравнить скорость с вариадиками и узнать насколько это будет быстрее в MSVC есть встроенный механизм для этого: https://devblogs.microsoft.com/cppblog/introducing-c-build-insights/
Последний MSVC должен поддерживать C17: https://devblogs.microsoft.com/cppblog/c11-and-c17-standard-support-arriving-in-msvc/
Было бы интересно сравнить с DryIocZero.
Для начала стоит пользоваться C++20, у которого больше свободы в использовании неявного перемещения.
До него не каждый return перемещал.
https://oleksandrkvl.github.io/2021/04/02/cpp-20-overview.html#more-impl-moves
Я пользуюсь гитом через различные GUI и делаю любые сложные действия произвожу легко и непринуждённо.
В то время как коллеги мучаются с командами из консоли.
В консоли тоже периодически бывает работаю с гитом и для этого очень советую oh-my-zsh или oh-my-posh.
А с массивом С эти приседания не нужны.
Для сред JetBrains есть полезные дополнения, которые сами подскажут горячие клавиши для того или иного действия.
https://plugins.jetbrains.com/plugin/7345-presentation-assistant
https://plugins.jetbrains.com/plugin/9792-key-promoter-x
Легко сказать, что нужно приведение типа каждый раз, но это банально неудобно.
А так его можно использовать только там где это не критично.
Кстати, у std::array есть ещё одна неприятная особенность.
std::array::size имеет тип size_t, а sizeof(a)/sizeof(a[0]) это константа, которую компилятор легко превращает в нужный тип.
Итого в MSVC получаем предуреждение об усечении типа:
https://m.habr.com/ru/company/auriga/blog/539760/#comment_22898618
Вполне возможно, что в простых случаях компилятор всё оптимизирует, но нет требований, чтобы это было всегда.
К сожалению стандарт не требует размер std::array чтобы был равен размеру массива.
sizeof(array<int,10>) >= sizeof(int[10])
С UnsafeBinaryFormatterSerialization=false нужно быть острожным.
Внезапно продукты MS (хе-хе) не работают без него. Т.е. всё собирается без проблем но падает самым непредсказуемым образом: github.com/PowerShell/PowerShell/issues/14054
Ну если ломать API и жизнь всем пользователям то можно рефакторить и поделить на части с зависимостями от WinForms и без.
Но это радикальный шаг, а хотелось решения без изменения кода.
Делаем приложение на 3.5.
Прописываем такой app.exe.config:
Приложение запускается с .NET 4 или выше если находит либо с .NET 3.5 (рантайм 2.0).
Это решение работает уже многие годы.
В небольших очень редких случаях есть различное поведение между 3.5 и 4.0.
Не подскажите какие?
Может я не всё включил у себя.