{
static_assert(!std::is_same_v<Key, void>, "no key");
key().method();
}
}
Что поменяется с отсутствием Статик ассерта? Если у нас этот метод никак расширяться не может и точек кастомищации 0
>> Что поменяется с отсутствием Статик ассерта? Вы неверно поняли мою мысль. Нужно не static_assert убрать, а добавить адекватную проверку входных данных — концепты. В крайнем случае повесить SFINAE на perform_key_action, чтобы ошибки отлавливались в сигнатуре, а не отложенно через static_assert. Потому что отложенная проверка хоть и позволяет написать читаемое сообщение с ошибкой, но имеет ряд проблем как, например, приведённый пример выше
Так к каким ошибкам в данном случае это приведет, если это по сути проверка инврианта
Из приведённого выше примера — это не так, и проверка полностью зависит от входных данных (предоставления/не предоставления пользователем Key). Правильный вариант решения — и вовсе убрать дефолтный параметр, тогда никаких проверок и не нужно. Но если же это какая-то полностью приватная часть библиотеки, лежащая в mylib::detail::, и пользователь никогда с ней не взаимодействует, то так, пожалуй, можно сделать
Обсуждают сегодня