Неявное преобразование параметров функции не происходит [дубликат]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Неявное преобразование параметров функции не происходит [дубликат]

Сообщение Anonymous »

У меня есть следующий фрагмент кода:

Код: Выделить всё

template
struct X {
template
X(T t) {}
};

template
void f(X x, A a) {}

int main() {
f(0, 0);
}
который не удалось скомпилировать (gcc 14.1.1) со следующей ошибкой:

Код: Выделить всё

test.cc:20:10: error: no matching function for call to ‘f(int, int)’
20 |         f(0, 0);
|         ~^~~~~~
test.cc:17:6: note: candidate: ‘template void f(X, A)’
17 | void f(X x, A a) {}
|      ^
test.cc:17:6: note:   template argument deduction/substitution failed:
test.cc:20:10: note:   mismatched types ‘X’ and ‘int’
20 |         f(0, 0);
|         ~^~~~~~
Если я правильно понимаю, любое значение должно быть конвертировано в X из-за шаблонного конструктора X(T)
Но вот что интересно заключается в том, что static_assert не вызывает ошибку времени компиляции:

Код: Выделить всё

static_assert(std::is_convertible_v); // no assertion failure
Как я могу изменить программу, чтобы сохранить оба шаблона и разрешить преобразование в X?


Подробнее здесь: https://stackoverflow.com/questions/787 ... -happening
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»