Вопрос для стандартных юристов C ++. Я чувствую, что следующий код должен быть принят на 100% и способен создавать экземпляр, когда определяется параметр шаблона, для которого определяется контейнер -размер (t const &) , но GCC (все версии, поддерживающие C ++ 23, включая туловище) отклоняет конструкции с использованием сцепного возврата с зависимыми именами:
#include
// wraps lvalues by ref and xvalues by move
template
struct wrap {
T obj;
friend consteval auto size(wrap const &) {
return size_;
}
};
// error in gcc, ok in clang:
template
wrap(T && a) -> wrap;
// error in gcc, ok in clang:
template
auto make_wrap(T && a) -> wrap {
return {std::forward(a)};
}
// ok in gcc and clang but requires T to be
// default-constructible:
template
auto make_wrap1(T && a) -> wrap {
return {std::forward(a)};
}
// ok in gcc and clang:
template
auto make_wrap2(T && a) {
return wrap{std::forward(a)};
}
Попробуйте здесь: https://godbolt.org/z/bo1bjzyqz. Ошибка: < /p>
Не существует аргументов для «размера», которые зависят от параметра шаблона,
, поэтому объявление «размер» должно быть доступно [-fpermissive] < /p>
< /blockquote>
. size (t {}) вместо size (a) . Но явно зависит от параметра шаблона t , так что оба должны работать, а Кланг все принимает.
это тогда ошибка в GCC?>
Подробнее здесь: https://stackoverflow.com/questions/796 ... g-in-gcc-o
Зависимые имена в руководствах вычета C ++ и типах возврата в следование - ошибка в GCC или плохо сформированные? ⇐ C++
Программы на C++. Форум разработчиков
1748302151
Anonymous
Вопрос для стандартных юристов C ++. Я чувствую, что следующий код должен быть принят на 100% и способен создавать экземпляр, когда определяется параметр шаблона, для которого определяется контейнер -размер (t const &) , но GCC (все версии, поддерживающие C ++ 23, включая туловище) отклоняет конструкции с использованием сцепного возврата с зависимыми именами:
#include
// wraps lvalues by ref and xvalues by move
template
struct wrap {
T obj;
friend consteval auto size(wrap const &) {
return size_;
}
};
// error in gcc, ok in clang:
template
wrap(T && a) -> wrap;
// error in gcc, ok in clang:
template
auto make_wrap(T && a) -> wrap {
return {std::forward(a)};
}
// ok in gcc and clang but requires T to be
// default-constructible:
template
auto make_wrap1(T && a) -> wrap {
return {std::forward(a)};
}
// ok in gcc and clang:
template
auto make_wrap2(T && a) {
return wrap{std::forward(a)};
}
Попробуйте здесь: https://godbolt.org/z/bo1bjzyqz. Ошибка: < /p>
Не существует аргументов для «размера», которые зависят от параметра шаблона,
, поэтому объявление «размер» должно быть доступно [-fpermissive] < /p>
< /blockquote>
. size (t {}) вместо size (a) . Но явно зависит от параметра шаблона t , так что оба должны работать, а Кланг все принимает.
это тогда ошибка в GCC?>
Подробнее здесь: [url]https://stackoverflow.com/questions/79639500/dependent-names-in-c-deduction-guides-and-trailing-return-types-bug-in-gcc-o[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия