Здравствуйте, watchmaker, Вы писали:
П>>Тут проблема — я не могу использовать _Char_traits/_WChar_traits — это же просто детали MSVC реализации.
W>Правильно, не нужно эти детали реализации использовать.
Ну, в версии для MSVC таки решил взять её. Если что, просто отключу этот выбор и перейду на универсальную
W>Нужно просто предоставить свою специализацию шаблона std::char_traits<EMyEnum>, написанную тобой, и с той логикой, которая тебе нужна.
А для других стырил из GCC. Там пошли своим путём и ручками все специализации описали. Ну, любят видимо люди копипастить. В принципе, там вроде только оconstexpr был замакрошен, я его заменил на ключевое слово.
Функции _builtin_mem* аналогичные MSVCшным, так что похоже они де факто стандартны
П>>Плюс ещё профит от оптимизации коротких строк.
W>Учти, что код для нестандартных char_traits протестирован весьма плохо даже в STL.
W>Вот, например, (ещё непочиненный) баг в libc++: https://github.com/llvm/llvm-project/issues/51158
W>Конкретно с EMyEnum едва ли будут какие-то проблемы, но если будешь использовать что-то ещё более экзотичное, то появляются риски того, что STL не полностью поддерживает стандарт для таких типов "символов".
Спасибо