Русский
Открыть в Telegram

Пост Не могу не поделиться самым веселым, на мой взгляд, примером из доклада великолепного Константина Владимирова. Он делал …

18 мая 2026
C
C++: Хроники Дурки🚑
Ссылка
нажмите — покажем
Не могу не поделиться самым веселым, на мой взгляд, примером из доклада великолепного Константина Владимирова. Он делал анонс доклада в своем tg канале. Пример вот такой: template <auto T = []{}> struct S {}; S a; S b; В чем тут цимес. У нас T - это лямбда. И если мы таким образом определяем переменные, то в тип S записываются разные лямбды, и у нас получаются два разных типа: static_assert( !std::is_same_v<decltype(a), decltype (b)> ); Если же мы явно укажем пустые треугольные скобки вот так: S<> a, b; static_assert( std::is_same_v<decltype(a), decltype (b)> ); То типы, внезапно, станут одинаковыми. Ну, мы один раз объявили тип, и две переменные этого типа. А теперь вопрос в зал. А что если мы определим эти две переменные точно так же, как во втором варианте, но только без явного указания треугольных скобок? S a, b; Давайте вы попробуете угадать? Ставя треугольные скобки мы исключаем вывод типов. Мы явно указываем, какой тип мы используем. Но если у нас есть вывод типов, у нас компиляторы начинают вести себя по-разному. clang падает с ошибкой ``` error: template arguments deduced as 'S<(lambda at <source>:4:20){}>' in declaration of 'a' and deduced as 'S<(lambda at <source>:4:20){}>' in declaration of 'b' 7 | S a, b; ``` А gcc считает, что это два разных типа. ``` static_assert( !std::is_same_v<decltype(a), decltype (b)> ); ``` Пруф. Вцелом доклад Константина был просто прекрасным, и я, наверное, понатырю сюда еще примеров из его доклада через пару месяцев. А когда он выйдет в открытый доступ - обязательно дам ссылку. Я был просто в восторге от дурки, которую он показывал.
84 · 14.4K ·

Рядом в ленте

CC++: Хроники Дурки🚑Посмеемся? #include <iostream> #include <string_view> struct Base { void Set(std::string_view) { std::cout << "string\n"; } void Set(int) { std::cout << "int\n"CC++: Хроники Дурки🚑Сижу на CppRussia. Пока тут каждый второй слайд первого же доклада - кандидат на пост сюда....
это сообщение
CC++: Хроники Дурки🚑Сегодняшняя рубрика называется "обычный шаблонный код, который компилируется только после жертвоприношения". Что выведет вот этот код? cpp #include <iostream> #CC++: Хроники Дурки🚑Разбираем письма читателей. Нам прислали вот такой вот код: #include <memory> #include <iostream> namespace user { struct user_type {}; using my_type = std::sha

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем