Я изучал удаление неиспользованных перегрузков и вызвал ошибку компиляции, которая, по словам компилятора, была ошибкой замены шаблона. Но я думал, что «сбой замены не является ошибкой», и в любом случае, зачем удалить перегрузку?#include
int ParseInt(const char *);
int ParseInt(std::string);
bool F(int(*)(const char *));
bool User() {
return F(ParseInt);
}
< /code>
Здесь, user () звонит f с адресом подготовки анализа. Все хорошо. Parseint перегружен, но только одна перегрузка соответствует подписи F. < /P>
Введите шаблон перегрузки F: < /p>
bool F(int(*)(const char *));
template
struct MetaDeduce {
typedef typename T::X type;
};
template
typename MetaDeduce::type F(const T&);
< /code>
Теперь есть эта странная перегрузка F, но это нормально, потому что в указанах функций нет участников именованных в любом случае. Все компилируется, все хорошо.#include
int ParseInt(const char *);
// int ParseInt(std::string); // commenting this out caused a compiler error!
bool F(int(*)(const char *));
template
struct MetaDeduce {
typedef typename T::X type;
};
template
typename MetaDeduce::type F(const T&);
bool User() {
return F(ParseInt);
}
< /code>
Как можно увидеть на Godbolt, это создает странную ошибку компиляции: < /p>
10 : error: type 'int (const char *)' cannot be used prior to '::'
because it has no members
typedef typename T::X type;
^
14 : note: in instantiation of template class 'MetaDeduce'
requested here
typename MetaDeduce::type F(const T&);
^
< /code>
wtf ??? Похоже, что компилятор жалуется на неудачу замены, но почему это не было проблемой раньше? И в любом случае, я думал, что сбой замены не была ошибкой! Что происходит?
Подробнее здесь: https://stackoverflow.com/questions/349 ... pile-error
Удаление неиспользованной перегрузки вызывает ошибку компиляции? ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1751772054
Anonymous
Я изучал удаление неиспользованных перегрузков и вызвал ошибку компиляции, которая, по словам компилятора, была ошибкой замены шаблона. Но я думал, что «сбой замены не является ошибкой», и в любом случае, зачем удалить перегрузку?#include
int ParseInt(const char *);
int ParseInt(std::string);
bool F(int(*)(const char *));
bool User() {
return F(ParseInt);
}
< /code>
Здесь, user () звонит f с адресом подготовки анализа. Все хорошо. Parseint перегружен, но только одна перегрузка соответствует подписи F. < /P>
Введите шаблон перегрузки F: < /p>
bool F(int(*)(const char *));
template
struct MetaDeduce {
typedef typename T::X type;
};
template
typename MetaDeduce::type F(const T&);
< /code>
Теперь есть эта странная перегрузка F, но это нормально, потому что в указанах функций нет участников именованных в любом случае. Все компилируется, все хорошо.#include
int ParseInt(const char *);
// int ParseInt(std::string); // commenting this out caused a compiler error!
bool F(int(*)(const char *));
template
struct MetaDeduce {
typedef typename T::X type;
};
template
typename MetaDeduce::type F(const T&);
bool User() {
return F(ParseInt);
}
< /code>
Как можно увидеть на Godbolt, это создает странную ошибку компиляции: < /p>
10 : error: type 'int (const char *)' cannot be used prior to '::'
because it has no members
typedef typename T::X type;
^
14 : note: in instantiation of template class 'MetaDeduce'
requested here
typename MetaDeduce::type F(const T&);
^
< /code>
wtf ??? Похоже, что компилятор жалуется на неудачу замены, но почему это не было проблемой раньше? И в любом случае, я думал, что сбой замены не была ошибкой! Что происходит?
Подробнее здесь: [url]https://stackoverflow.com/questions/34931775/removing-an-unused-overload-causes-compile-error[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия