класс exception (не std::), который умеет конструироваться от:
> exception(const char*)
> exception(const_char*, size_t)
Но он должен иметь другую семантику при создании от строки, которая гарантированно переживет объект исключения
Для этого хотелось бы иметь конструкторы
> exception(const char(&)[N])
> exception(const char*, persistent_message_tag)
> exception(const char*, size_t, persistent_message_tag)
Проблема: разрулить перегрузки от указателя и массива, сделав при этом интерфейс удобным для пользователя. Сейчас я решил вопрос слегка костыльно - дополнительным impermanent_message_tag в первую.
Как правильнее?
Правильнее писать на Rust
Жаль, тут нет Царя
Вот когда напишете рантайм Rust'a для виндового kernel space - милости прошу, а сейчас это оффтопик)
Как там ваш раст, научился в статическую интроспекцию? А в CTFE?
Сейчас выясниться, что и винда не нужна
Без лирики в сообщениях
Мне хочется делать теги первыми всегда, чтобы форвардить... если что Но в принципе хочется, чтобы семантически разные параметры были разнотипными.
Насчет расположения тегов - спасибо за мысль Разнотипные параметры сделать не удастся: конструктор от const char* требуют Стандарт и здравый смысл, а таковой для const char(&)[N] позволит бросить исключение без аллокаций (и даже без обращения к зарезервированной памяти)
Я скорее предпочел бы там конструктор от string_view, но это личное
Бери fixed_string...
Внутри-то все равно будет храниться указатель (либо на строку плюс счётчик ссылок, либо на литерал напрямую)
Ну это сложно... Может тебе подумать о создающих объект функциях? Или даже сразу кидаться исключением из функции
Учти что от массива с размером конструктор должен быть шаблонным. Это тоже добавит сложности
https://gcc.godbolt.org/z/o7avdx7Mv
Концепты мне нельзя, но идею понял, благодарю)
А концептов здесь нет
std::same_as
Действительно
Я использую наследника string_view с названием literal_view который только из массива конструируется ну или через оператор ""__lv. Или явным преобразованием to_literal_view. Перегрузки соответственно две, string_view/literal_view.
На всякий случай: идентификаторы с более чем одним андерскором подряд зарезервированы для имплементации в любой области видимости.
Да, ""_lv, конечно, описка просто.
Обсуждают сегодня