llvm 18.1.0
От: reversecode google
Дата: 06.03.24 19:24
Оценка: 12 (2)
https://github.com/llvm/llvm-project/releases/tag/llvmorg-18.1.0
тутачки клангчик за релизили
ну за релизили и черт с ним, скажете вы
между версии они каждые две недели клепают
но есть реализация фишки с с++26

https://releases.llvm.org/18.1.0/tools/clang/docs/ReleaseNotes.html#c-2c-feature-support

struct S {
int _, _; // Was invalid, now OK
};
void func() {
int _, _; // Was invalid, now OK
}
void other() {
int _; // Previously diagnosed under -Wunused, no longer diagnosed
}

вкусно же, не нужно придумывать всякие reserved имена переменным

есть еще P0847R7: Deducing this для C++23
но мне он как то не зашел, не вижу пока применения
Re: llvm 18.1.0
От: rg45 СССР  
Дата: 06.03.24 19:48
Оценка:
Здравствуйте, reversecode, Вы писали:

R>вкусно же, не нужно придумывать всякие reserved имена переменным


Лучше б они сделали разворачивание вариадик паков в структурированные биндинги, вот это реально полезная штука была бы. Там у них пропозал валяется где-то, интересно, что из этого получится и когда.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 06.03.2024 19:49 rg45 . Предыдущая версия .
Re: llvm 18.1.0
От: T4r4sB Россия  
Дата: 06.03.24 19:54
Оценка:
Здравствуйте, reversecode, Вы писали:

R>есть еще P0847R7: Deducing this для C++23

R>но мне он как то не зашел, не вижу пока применения

Для мелких объектов, помещающихся в 1-2 слова, нет смысла передавать указатель
Re[2]: llvm 18.1.0
От: reversecode google
Дата: 06.03.24 20:24
Оценка:
да с++20 тоже не имеет смысла юзать
всегда можно и с++98 обойтись
но удобства'c сер

ну это же совсем про другое
это больше для всяких заумных разработчиков либ
и на конфах рассказывать
Re: llvm 18.1.0
От: kov_serg Россия  
Дата: 06.03.24 20:54
Оценка: :))) :)
Здравствуйте, reversecode, Вы писали:

R>вкусно же, не нужно придумывать всякие reserved имена переменным

ням-ням
enum { _,_,_,_,_,_,_ };
int _(int _,int _,...);
struct _{ int _,********_,_,_,_,_[8]; _(){} }_;
Re[3]: llvm 18.1.0
От: T4r4sB Россия  
Дата: 06.03.24 21:01
Оценка:
Здравствуйте, reversecode, Вы писали:

R>да с++20 тоже не имеет смысла юзать

R>всегда можно и с++98 обойтись
R>но удобства'c сер

Ты о чём?
Re[4]: llvm 18.1.0
От: reversecode google
Дата: 06.03.24 21:06
Оценка:
это намёк, на аналогичный вопрос
дедусин зис
это про то что бы не писать "сто перегрузок" для какого то метода
типа все заворачивается в один
а дедусин сиз все ловит

причем здесь передача мелких объектов без сиз, хз
Re[5]: llvm 18.1.0
От: T4r4sB Россия  
Дата: 06.03.24 21:16
Оценка: +2
Здравствуйте, reversecode, Вы писали:

R>причем здесь передача мелких объектов без сиз, хз


Я про возможность передавать зис по копии, явно указывая тип зиса. Без неё невозможно было бы сверху приделать шаблонный тип зиса. Ок, я не в тему сказал.
Re: llvm 18.1.0
От: andrey.desman  
Дата: 06.03.24 21:43
Оценка:
Здравствуйте, reversecode, Вы писали:

R>есть еще P0847R7: Deducing this для C++23

R>но мне он как то не зашел, не вижу пока применения

Рекурсивные лямбды.
Re[2]: llvm 18.1.0
От: rudzuk  
Дата: 06.03.24 22:00
Оценка:
Здравствуйте, kov_serg, Вы писали:

k> ням-ням

k>
k> enum { _,_,_,_,_,_,_ };
k> int _(int _,int _,...);
k> struct _{ int _,********_,_,_,_,_[8]; _(){} }_;
k>


Пацаны ваще ребята!
avalon/3.0.2
Re: llvm 18.1.0
От: rg45 СССР  
Дата: 06.03.24 23:29
Оценка:
Здравствуйте, reversecode, Вы писали:

R>есть еще P0847R7: Deducing this для C++23

R>но мне он как то не зашел, не вижу пока применения

Ну как же, можно обращаться к this внутри функций по правилам perfect forwarding references. Это во многих случаях избавляет от копипасты функций-членов для разлиных комбинаций модификатров — const/non-const, const&, &, &&, etc.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[2]: llvm 18.1.0
От: reversecode google
Дата: 06.03.24 23:33
Оценка:
у меня нет такого обилия использования в однородных членах функций
что бы это соптимизировалось

посему это больше для разрабов всяких либ или почесать чсв на конфах
Re[3]: llvm 18.1.0
От: Amras Singollo  
Дата: 07.03.24 08:56
Оценка: +1 :)
Здравствуйте, rudzuk, Вы писали:

R>Пацаны ваще ребята!


Умеете, могете
Re[2]: llvm 18.1.0
От: reversecode google
Дата: 07.03.24 10:38
Оценка:
скажите а вы все это сами пробуете
или только на тарелочки раскладываете ?
Re: llvm 18.1.0
От: so5team https://stiffstream.com
Дата: 07.03.24 11:30
Оценка:
Здравствуйте, reversecode

Интересно, интересно.

enum class variants { one, two, three };

namespace
{

int get(variants v) {
    int r = 0;
    switch(v) {
        case variants::one: r = 1; break;
        case variants::two: r = 2; break;
        case variants::three: r = 3; break;
    }
    return r;
}

} /* namespace anonymous */

int main()
{
    return get(variants::three);
}


Берем clang-17:
$ clang++-17 -Werror -Weverything -std=c++20 t1.cpp -Wno-c++98-compat

Нет ошибок.

А вот с clang-18:
$ clang++-18 -Werror -Weverything -std=c++20 t1.cpp -Wno-c++98-compat
t1.cpp:8:2: error: 'switch' missing 'default' label [-Werror,-Wswitch-default]
    8 |         switch(v) {
      |         ^
1 error generated.


И спрашивается: нафига?

ЗЫ. Я в курсе, что -Weverything -- это для совсем уж параноиков. Но осадочек-то все равно остается...
Re[2]: llvm 18.1.0
От: reversecode google
Дата: 07.03.24 11:39
Оценка:
не понял вопроса
почему дефолт является частью синтаксиса ?
ну так
https://eel.is/c++draft/stmt.switch#3
Re[3]: llvm 18.1.0
От: so5team https://stiffstream.com
Дата: 07.03.24 11:55
Оценка:
Здравствуйте, reversecode, Вы писали:

R>не понял вопроса


И не удивительно.

R>почему дефолт является частью синтаксиса ?


Нет, не почему дефолт является частью синтаксиса, а почему clang-18 вдруг стал требовать дефолт там, где все возможные варианты были обработаны через case/break.
Re[4]: llvm 18.1.0
От: reversecode google
Дата: 07.03.24 12:18
Оценка:
так бы сразу и сказали
https://github.com/llvm/llvm-project/issues/81354
Re[4]: llvm 18.1.0
От: sergii.p  
Дата: 11.03.24 15:17
Оценка:
Здравствуйте, so5team, Вы писали:

S>все возможные варианты были обработаны через case/break.


ну явно же не все. Там запросто может быть

return get(variants{ 4 });


получается внештатная ситуация возможна и компилятор просит её явно разрулить. По-моему, весьма похвально.
Re[5]: llvm 18.1.0
От: so5team https://stiffstream.com
Дата: 12.03.24 07:03
Оценка:
Здравствуйте, sergii.p, Вы писали:

SP>ну явно же не все. Там запросто может быть


SP>
SP>return get(variants{ 4 });
SP>


Запросто такое может быть разве что если variants описан как:
enum class variants : int {};

тогда программист может пихать в variants все, что угодно (если он все еще остается в рамках int-а).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.