Как удалить функцию перегрузки из разрешения перегрузки? - PullRequest
3 голосов
/ 16 июня 2020

Допустим, у меня есть класс STest, и я хочу, чтобы он мог неявно приводить к char const*, но не к bool.

struct STest {
    operator char const*() const& { return "abc"; }
    operator bool() const& = delete;
};

void bar(bool) {}

void foo(bool) {}
void foo(char const*) {}

Эта реализация работает должным образом (ошибка) при вызове bar(STest{}). Но это не работает для foo(STest{}), потому что удаленная функция также учитывается при разрешении перегрузки и жалуется на двусмысленность. Есть ли способ обойти это, что означает, что bar(STest{}) вызывает ошибку, а foo(STest{}) вызывает foo(char const*)?

1 Ответ

4 голосов
/ 16 июня 2020
• 1000 из контекста, а затем решит, следует ли вообще удалить перегрузку из разрешения перегрузки. При однократной перегрузке двусмысленности не будет.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...