Я бы предпочел смутное вменяемое поведение, что-то сумасшедшее.
Ну, как потенциальный потребитель вашей библиотеки, вот что я хотел бы: если нет затрат на производительность для документированного использования, тогда посмотритеесли одно из значений memory_order предоставляет функциональный расширенный набор других, в частности что-то, соответствующее тому, что вызывающий может наивно ожидать от неподдерживаемых режимов (если может быть сформировано какое-либо разумное ожидание).Вызывающий может получить самый медленный, самый безопасный режим, но это лучше, чем что-то функционально неправильное.Вы сводите к минимуму зависимость клиентского кода от получения всего, что идеально подходит для вашего кода.Проблема с этим - по сравнению с утверждением / исключением - заключается в том, что он может остаться незамеченным в тестовой среде, поэтому рассмотрите также написание объяснения для std :: cerr, используя статическую переменную, чтобы ограничить количество сообщений одним запуском процесса.Это очень полезная диагностика.
Исключение, фатальное утверждение и т. Д. Может привести к сбою клиентского приложения в очень неудобный момент ... Кажется, немного драконовским, а не то, что я особенно ценю.Другой вариант - иметь переменную окружения, управляющую этим поведением.
(Вероятно, существует аналогичная проблема для значений, которых нет даже в текущем перечислении.)