У меня есть простой класс:
class A {
public:
bool f(int* status = nullptr) noexcept {
if (status) *status = 1;
return true;
}
void f() {
throw std::make_pair<int, bool>(1, true);
}
};
int main() {
A a;
a.f(); // <- Ambiguity is here! I want to call 'void f()'
}
Я хочу разрешить неоднозначность вызова метода в пользу метода throw-throw любым способом.
Обоснование такого интерфейса:
- Чтобы иметь интерфейс
noexcept(true)
иnoexcept(false)
, - Чтобы дополнительно получить дополнительную информацию с помощью указателя в варианте
noexcept(false)
, в то время как вариантnoexcept(true)
всегда будет упаковывать эту информацию в исключение.
Возможно ли вообще? Предложения по улучшению интерфейса также приветствуются.