170 похожих чатов

Головоломка для ценителей. По мотивам вопроса от одного моего студента.



Кланг компилирует, gcc нет: https://godbolt.org/z/Y17o4oGbr

Кто прав, как обосновать? =)

15 ответов

25 просмотров

Жусть. Кажется, что прав всё-таки gcc. Сомнительно, что этот decltype на что-то влияет

Зачем-то много всего накручено, это то же, что и: template <typename T, typename... Ts> void foo() { } template <typename T> void foo() { } int main() { foo<int>(); } Имхо прав GCC.

А там случаем не надо бы this везде добавить?

Konstantin-Vladimirov Автор вопроса
Alexander Tulikov
Зачем-то много всего накручено, это то же, что и: ...

Как тут уже догадались, если поставить this (или убрать class) то оба справляются. Неужели оба в этом случае не правы?

Konstantin-Vladimirov Автор вопроса
Egor Suvorov
Жусть. Кажется, что прав всё-таки gcc. Сомнительно...

А если убрать struct и убрать decltype, то оба не справляются, этот decltype очень нужен, он SFINAE-case делает =)

Konstantin Vladimirov
Как тут уже догадались, если поставить this (или у...

Ну тогда понятно, что для пустого параметр пака не сможет вывестись тип шаблона в decltype. Занятный пример. Без класса тогда можно так записать: template <typename T> void foo() { } template <typename T, typename... Ts> auto foo() -> decltype(foo<Ts...>()) { } int main() { foo<int>(); }

Я не мог не проверить. https://asciinema.org/a/HyhEhtqOPz6FGJeZxwW6lfcXI

Konstantin-Vladimirov Автор вопроса
🐈
Я не мог не проверить. https://asciinema.org/a/Hy...

g++ же надо... Ну и потом зачем такие ужасы когда есть годболт?

Konstantin Vladimirov
g++ же надо... Ну и потом зачем такие ужасы когда ...

Мне gcc в termux не воткнуть. годболт неудобен с телефона

Прав Clang. Пример сводится к https://godbolt.org/z/qxbxvfKEs struct S { template <typename> void /* #1 */ as(); template <typename, typename... Ts> auto /* #2 */ as() -> decltype(as<Ts...>()); }; void test() { S{}.as<short, int, long>(); } который GCC почему-то компилирует, считая после подстановки trailing-return-type #2, что мн-во overloading candidates для as это все ф-и класса, включая саму перегрузку #2. На самом деле мн-во кандидатов должно включать в себя только то что объявлено до #2, т.е только #1 в нашем случае.

Konstantin-Vladimirov Автор вопроса
Andrey Davydov
Прав Clang. Пример сводится к https://godbolt.org/...

Очень красивая редукция, мои поздравления )) Действительно, дело в том: 1. Где кончается полное объявление 2. Нужно ли оно для набора в множество кандидатов

Andrey Davydov
Прав Clang. Пример сводится к https://godbolt.org/...

Но почему оно не должно включать само себя? Разве рекурсивный вызов самого себя не надо рассматривать?

Pavel Zhigulin
Но почему оно не должно включать само себя? Разве ...

Хотя да, как тогда вообще закончить подобную рекурсию, логично

Pavel Zhigulin
Но почему оно не должно включать само себя? Разве ...

Чтобы писать auto f() -> decltype(f()); было неповадно

Andrey Davydov
Чтобы писать auto f() -> decltype(f()); было непов...

Но что если у нас f() есть в глобальном пространстве имён?) Соответственно у нас должен инстанцироваться вариант от глобального f() (он ведь валиден?), но вариант с подстановкой себя - ошибка (но SFINAE и поэтому ок).

Похожие вопросы

Обсуждают сегодня

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
9
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта