Я не уверен, какой компилятор прямо здесь, так как я еще не полностью опытен с концепциями C ++ 20. Следующий код отклоняется GCC (15.1), говоря, что не существует соответствующей объявления для foo :: do_foo , clang (20.1.0) принимает код. Вот на Годболте. Замена Decktype (x) с помощью u в типе возврата или с использованием неограниченного U для параметра функции делает оба компилятора счастливо скомпилировать код. Идея заключалась в том, чтобы тип возврата был диапазоном констального T всякий раз, когда пройденное параметр является const .
Какой компилятор «в праве» здесь? Или, альтернативно, является ли следующее правильное C ++? < /P>
Спасибо! < /P>
#include
#include
#include
#include
template
concept RangeReturnTypeIsConvertibleTo = requires(RangeType r) {
{ *r.begin() } -> std::convertible_to;
};
template
concept RangeOf = std::ranges::range &&
RangeReturnTypeIsConvertibleTo;
template
concept IsQualificationOf = std::same_as;
class Foo {
public:
using T = int;
template
auto do_foo(U&& x) -> RangeOf auto;
};
template
auto Foo::do_foo(U&& x) -> RangeOf auto
{
static std::vector bar{4, 5, 8};
return bar;
}
int main() {
auto foo = Foo();
for(auto a : foo.do_foo(4)) std::cout
:31:6: error: no declaration matches 'auto [requires ::RangeOf] Foo::do_foo(U&&)'
31 | auto Foo::do_foo(U&& x) -> RangeOf auto
| ^~~
:26:10: note: candidate is: 'template requires IsQualificationOf auto [requires ::RangeOf] Foo::do_foo(U&&)'
26 | auto do_foo(U&& x) -> RangeOf auto;
| ^~~~~~
:20:7: note: 'class Foo' defined here
20 | class Foo {
| ^~~
: In function 'int main()':
:42:28: error: use of 'auto [requires ::RangeOf] Foo::do_foo(U&&) [with U = int]' before deduction of 'auto'
42 | for(auto a : foo.do_foo(4)) std::cout
Подробнее здесь: https://stackoverflow.com/questions/797 ... t-by-clang
Код с использованием ограниченного авто, отклоненного GCC, но не Clang ⇐ C++
Программы на C++. Форум разработчиков
1752680470
Anonymous
Я не уверен, какой компилятор прямо здесь, так как я еще не полностью опытен с концепциями C ++ 20. Следующий код отклоняется GCC (15.1), говоря, что не существует соответствующей объявления для foo :: do_foo , clang (20.1.0) принимает код. Вот на Годболте. Замена Decktype (x) с помощью u в типе возврата или с использованием неограниченного U для параметра функции делает оба компилятора счастливо скомпилировать код. Идея заключалась в том, чтобы тип возврата был диапазоном констального T всякий раз, когда пройденное параметр является const .
Какой компилятор «в праве» здесь? Или, альтернативно, является ли следующее правильное C ++? < /P>
Спасибо! < /P>
#include
#include
#include
#include
template
concept RangeReturnTypeIsConvertibleTo = requires(RangeType r) {
{ *r.begin() } -> std::convertible_to;
};
template
concept RangeOf = std::ranges::range &&
RangeReturnTypeIsConvertibleTo;
template
concept IsQualificationOf = std::same_as;
class Foo {
public:
using T = int;
template
auto do_foo(U&& x) -> RangeOf auto;
};
template
auto Foo::do_foo(U&& x) -> RangeOf auto
{
static std::vector bar{4, 5, 8};
return bar;
}
int main() {
auto foo = Foo();
for(auto a : foo.do_foo(4)) std::cout
:31:6: error: no declaration matches 'auto [requires ::RangeOf] Foo::do_foo(U&&)'
31 | auto Foo::do_foo(U&& x) -> RangeOf auto
| ^~~
:26:10: note: candidate is: 'template requires IsQualificationOf auto [requires ::RangeOf] Foo::do_foo(U&&)'
26 | auto do_foo(U&& x) -> RangeOf auto;
| ^~~~~~
:20:7: note: 'class Foo' defined here
20 | class Foo {
| ^~~
: In function 'int main()':
:42:28: error: use of 'auto [requires ::RangeOf] Foo::do_foo(U&&) [with U = int]' before deduction of 'auto'
42 | for(auto a : foo.do_foo(4)) std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79703610/code-using-constrained-auto-rejected-by-gcc-but-not-by-clang[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия