так компайл тайм рефлекшину быть 26-й стандарт ??
От: ботаныч Интернет https://youtu.be/I3lhN5CUP2M
Дата: 09.02.26 03:55
Оценка:
прогнозы? к какому году, к примеру у мелгкомякгких появится..
Re: так компайл тайм рефлекшину быть 26-й стандарт ??
От: B0FEE664  
Дата: 09.02.26 16:24
Оценка:
Здравствуйте, ботаныч, Вы писали:

Б>прогнозы? к какому году, к примеру у мелгкомякгких появится..


Да вы предлагаемый синтаксис видели? Он вам такой зачем?
И каждый день — без права на ошибку...
Re[2]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: sergii.p  
Дата: 09.02.26 17:06
Оценка: +2
Здравствуйте, B0FEE664, Вы писали:

BFE>Да вы предлагаемый синтаксис видели? Он вам такой зачем?


а что в нём такого плохого?

Вот например рядом обсуждают задачу получения минимального значения из enum
template <typename E>
  requires std::is_enum_v<E>
constexpr auto enum_min()
{
    auto minVal = std::numeric_limits<std::underlying_type_t<E>>::max();

    template for (constexpr auto e : std::meta::enumerators_of(^E)) {
        const auto v = std::to_underlying([:e:]);
        if (v < minVal)
            minVal = v;
    }

    return minVal;
}

всяко лучше, чем костыли от magic_enum
Re[3]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: B0FEE664  
Дата: 10.02.26 15:06
Оценка: +3
Здравствуйте, sergii.p, Вы писали:

BFE>>Да вы предлагаемый синтаксис видели? Он вам такой зачем?

SP>а что в нём такого плохого?
В примере ниже отчётливо видны проблемы синтаксиса.
Свойства объекта записываются в C++ как? Через модификатор доступа, т.е. через . или ->
a.size() — размер;
p->data() — данные.
Комитетчики добавили это для метаданных? Нет, они пишут сначала преобразование всего имени в метаобъект, а потом используют сишный (!) доступ к его свойствам:
std::meta::enumerators_of(^E)
Они просто издеваются над языком.
Эта запись должна выглядеть так:
E.entities

Далее, вот этот синтаксис [:e:] не нужен. То, что е — это метаобъект и так известно. Поэтому e.name должно давать имя, а e.value — значение.

Далее, template for не нужен. Код относящийся к рефлексии не может выполняться в рантайме, так что template тут лишний, поэтому, кстати, enum_min() должна быть consteval, а не constexpr.

В целом я бы записал этот пример так:
template <typename E>
  requires std::is_enum_v<E>
consteval E.underlying_type enum_min()
{
    auto minVal = E.underlying_type.max_value;

    for(auto e : E.entities)
    {
        const auto v = e.value;
        if (v < minVal)
            minVal = v;
    }
    return minVal;
}


— всё просто и понятно. Всё , что надо сделать, это продумать названия свойств, которые есть у метаобъектов. Причём эти свойства можно вводить постепенно, добавляя от версии к версии. Для начала — просто для чтения. Это уже решило бы 80% задач.

Вместо эволюционного пути развития комитетчики задумали революцию и изобретают метаязык который год. Результат их работы станет такая монструозная химера, которую невозможно будет нормально использовать. Надеюсь они потому её и не выпускают, что понимают, какая ерунда получается. Если они продолжат в том же духе, то эти нововведения постигнет та же судьба, что и SGML.

  Скрытый текст
SP>Вот например рядом обсуждают задачу получения минимального значения из enum
SP>
SP>template <typename E>
SP>  requires std::is_enum_v<E>
SP>constexpr auto enum_min()
SP>{
SP>    auto minVal = std::numeric_limits<std::underlying_type_t<E>>::max();

SP>    template for (constexpr auto e : std::meta::enumerators_of(^E)) {
SP>        const auto v = std::to_underlying([:e:]);
SP>        if (v < minVal)
SP>            minVal = v;
SP>    }

SP>    return minVal;
SP>}
SP>

SP>всяко лучше, чем костыли от magic_enum


Что же касается обсуждения рядом, то я могу лишь повториться: набор констант и перечисление — это два различных "метатипа". У нормального перечисления вообще нет значений. Если вам нужны значения, значит вам нужен набор констант, а не перечисление.
И каждый день — без права на ошибку...
Re[3]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: kov_serg Россия  
Дата: 10.02.26 19:22
Оценка: +1 :)
Здравствуйте, sergii.p, Вы писали:

BFE>>Да вы предлагаемый синтаксис видели? Он вам такой зачем?


SP>а что в нём такого плохого?

Примерно всё плохо. Вместо языка запросов имеем псевдо c++. Что мешало использовать обычные строки вместо бяанов [::] ?
Нет возможности сохранить результат в файл или обратится к базе.
И потом этап синтеза кода лучше разделить, а не пихать всё в кучу умножая сложность.
Отредактировано 10.02.2026 19:22 kov_serg . Предыдущая версия .
Re[4]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: · Великобритания  
Дата: 26.02.26 09:53
Оценка:
Здравствуйте, B0FEE664, Вы писали:


BFE>Эта запись должна выглядеть так:

BFE>E.entities
А что делать, если в E уже есть имя entities? В лучшем случае что-то вроде std::meta<E>::entities.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: B0FEE664  
Дата: 26.02.26 10:25
Оценка: +1
Здравствуйте, ·, Вы писали:

BFE>>Эта запись должна выглядеть так:

BFE>>E.entities
·>А что делать, если в E уже есть имя entities? В лучшем случае что-то вроде std::meta<E>::entities.

Ничего не делать. E.entities и E::entities — это доступ к разным значениям.
И каждый день — без права на ошибку...
Re[2]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: ботаныч Интернет https://youtu.be/I3lhN5CUP2M
Дата: 16.03.26 15:36
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, ботаныч, Вы писали:


Б>>прогнозы? к какому году, к примеру у мелгкомякгких появится..


BFE>Да вы предлагаемый синтаксис видели? Он вам такой зачем?

Много проще чем в велосипедах на хаках да СФИНАЯХ, сейчас хоть вариэдики появились, нет потребности в тех многопараметриальных шаблонах.
Это конечно решалось макросами с __VA_ARGS__, что легко конвертиировалось с структуры вида template <typename Before, typename Next> struct item; в бустах для этого (по памяи, могу оши баться) template <typename Before, typename Next, int Way> v_item;
Собственно появление этой фичи в стандарте может серьезно поменять позиции в usability, т.к. всякие гибернейты и прочие ком|ком+ будут создаваться влет
Re[4]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: ботаныч Интернет https://youtu.be/I3lhN5CUP2M
Дата: 18.03.26 14:58
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, sergii.p, Вы писали:


BFE>>>Да вы предлагаемый синтаксис видели? Он вам такой зачем?

SP>>а что в нём такого плохого?
BFE>В примере ниже отчётливо видны проблемы синтаксиса.
BFE>Свойства объекта записываются в C++ как? Через модификатор доступа, т.е. через . или ->
BFE>a.size() — размер;
BFE>p->data() — данные.

операторы выше используются часто и в рантайме, в частности с виртуальными фунцкиями прочей, где и сам метод вычисляется по таблице вирт ф-ций. Не вижу причин упоминать здесь операторы -> и ., в качестве претензий .., получить от рефлекшина вариэдик из &class__::mem; а для этого предложенный синтаксис вполне удовлетворителен.

BFE>Комитетчики добавили это для метаданных? Нет, они пишут сначала преобразование всего имени в метаобъект, а потом используют сишный (!) доступ к его свойствам:

сишный доступ для компайлтайм звучит как прокрутить фарш обратно

BFE>Эта запись должна выглядеть так:

BFE>E.entities
Шарпофщина какая-то, это там к "вложенным типам" обращаются через точку, в плюсах привычнее с::m

BFE>Далее, вот этот синтаксис [:e:] не нужен. То, что е — это метаобъект и так известно. Поэтому e.name должно давать имя, а e.value — значение.

я сомневаюсь, что без наличия под рукой текущий компилятор с тем, чтобы ззаранее проверить какие синтаксические нагрузки надо добавить, что-бы разрешить появляющиеся в нем конфликты. Я так подозреваю, гонка на реализацию рефлекшина стартанула, а там уже подтянется первым ) того и тапки

BFE>Далее, template for не нужен.

в gcc часто надо добавлять typename при обращении к вложенному темплиту... using type_ = some_struct::typename calc_some_type<type_arg>::type; а мелкомягких не надо. Вы же говорите об этом, "как вам заблагорассудится", не зная, чем чревато.

BFE>Код относящийся к рефлексии не может выполняться в рантайме, так что template тут лишний, поэтому, кстати, enum_min() должна быть consteval, а не constexpr.


BFE>В целом я бы записал этот пример так:

BFE>
BFE>template <typename E>
BFE>  requires std::is_enum_v<E>
BFE>consteval E.underlying_type enum_min()
BFE>{
BFE>    auto minVal = E.underlying_type.max_value;

BFE>    for(auto e : E.entities)
BFE>    {
BFE>        const auto v = e.value;
BFE>        if (v < minVal)
BFE>            minVal = v;
BFE>    }
BFE>    return minVal;
BFE>}
BFE>


BFE>- всё просто и понятно.

мне так не кажется, получается, что мы заморачиваемся еще к куче всевозможных кейсам по модификации типов операторами доступа и прочим, что ломает уже существующие парадигмы.

Впрочем, меня заломало отвечать более развернуто ... кинул к копайлот, и скажем в чем-то я там согласен, и сомнения похожи.

которую вы привели, отражает одну из самых горячих дискуссий в сообществе C++. Это классический конфликт между «прагматичным дизайном» (как это могло бы быть в идеальном новом языке) и «дизайном комитета», скованным обратной совместимостью и необходимостью вписать метапрограммирование в существующую грамматику.
Вот несколько тезисов в ответ на этот разбор:
1. Синтаксис ^E vs E.entities
Автор прав: запись E.entities выглядит естественнее. Однако в C++ точка (.) зарезервирована для доступа к членам объекта. Если разрешить E.entities, где E — тип, возникает неоднозначность с static полями.
Комитет выбрал оператор отражения ^ (reflection operator), чтобы четко разграничить: «сейчас мы работаем не с типом, а с его метаданным описанием». Это позволяет избежать перегрузки парсера, но, безусловно, выглядит «инородно».
2. Сплайсинг [:e:] и метаобъекты
Автор утверждает, что e.value достаточно. Но в текущем черновике рефлексии (P2996) e — это не сам объект, а «дескриптор» (handle) метаобъекта.
Сплайсинг ([:e:]) — это мост из мира метаданных обратно в мир кода.
Без явного сплайсинга компилятору было бы крайне сложно понять, когда вы хотите получить свойство метаобъекта, а когда — превратить метаобъект в реальное выражение (expression), которое можно использовать в коде.
3. template for vs обычный for
Здесь автор затронул фундаментальную проблему. Обычный for в C++ порождает цикл в рантайме. Чтобы превратить итерацию по метаданным в развернутый код (unrolling) или генерацию разных типов на каждой итерации, нужен специальный маркер.
Если оставить обычный for, компилятору придется проводить сложнейший анализ, чтобы понять: «ага, это цикл по константам, я должен его развернуть».
template for явно говорит: «это генерация кода». Это делает поведение предсказуемым.
4. consteval vs constexpr
Автор абсолютно прав в том, что функции, работающие исключительно с метаданными, должны быть consteval. В C++20/23 constexpr функция может быть вызвана в рантайме, а рефлексия в рантайме невозможна. Использование consteval здесь — это не просто хороший тон, а гарантия того, что код не «протечет» в исполняемый файл.
5. Философский вопрос: Революция или Эволюция?
Критика про «монструозную химеру» обоснована. C++ пытается внедрить мощнейшую систему метапрограммирования, не ломая парсеры, написанные 30 лет назад.
Подход автора (в стиле C# или Swift) требует полной переработки модели типов.
Подход комитета — это попытка дать программисту «низкоуровневый ассемблер для типов». Это мощно, но страшно на вид.
Итог
Предложенный автором вариант (E.entities, e.value) — это путь языка с сильной встроенной интроспекцией (как Zig или частично Rust). Путь C++ — это путь библиотечного метапрограммирования, где через страшные символы (^, [: :]) даются фундаментальные возможности, на которых потом напишут красивые обертки.
Согласны ли вы с тем, что C++ стоило бы пожертвовать совместимостью ради чистоты синтаксиса, или гибкость текущего (пусть и сложного) подхода важнее?

Оно там вопрос задает, ..
На счет вашей надежды, что оно завязнет. посмотрим, есть надежда (вполне ощутимые), когда начнут появляться хибернейты, когда реляционные структуры с запросами в SQL с проверкой на этапе компиляции, регекспы с встраеваемыми объектами в запрос ...
Re[6]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: ботаныч Интернет https://youtu.be/I3lhN5CUP2M
Дата: 18.03.26 15:01
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, ·, Вы писали:


BFE>>>Эта запись должна выглядеть так:

BFE>>>E.entities
BFE>·>А что делать, если в E уже есть имя entities? В лучшем случае что-то вроде std::meta<E>::entities.

BFE>Ничего не делать.

BFE>E.entities и E::entities — это доступ к разным значениям.
Это ирония ?? Ничего делать, в компайл-коснт классе появится какой-то там "."? еще и разный с class::foo ..
просто переписать компилятор, и всего-то, написать другой фактически. А зачем ? если уже есть ::
Re[7]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: B0FEE664  
Дата: 19.03.26 15:07
Оценка:
Здравствуйте, ботаныч, Вы писали:

BFE>>E.entities и E::entities — это доступ к разным значениям.

Б> Это ирония ?? Ничего делать, в компайл-коснт классе появится какой-то там "."? еще и разный с class::foo ..
Б>просто переписать компилятор, и всего-то, написать другой фактически. А зачем ? если уже есть ::

Никакая это не ирония. Два двоеточия ("::") — это переход по имени, а '.' — это доступ к свойству (к проперти, говоря на сленге). Как их можно перепутать я представляю с трудом. "компайл-коснт" тут вообще ни причём. Нет никакой проблемы в том, чтобы операция доступа к свойствам объекта встречалась в любом контексте. Вас же не смущает, что в коде можно написать sizeof(int) ? Я не вижу причин, почему всякий sizeof(int) нельзя заменить на выражение int.size.
Сейчас, за именем типа не может следовать одна точка (только троеточие), а за именем объекта не может следовать два двоеточия (только одно). Если не согласны — приводите пример.
Поэтому нет никаких проблем с тем, чтобы задействовать точку после имени.
Компилятор переписывать не надо, так как добавление точки — это расширение, а не изменение.
И каждый день — без права на ошибку...
Re[8]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: ботаныч Интернет https://youtu.be/I3lhN5CUP2M
Дата: 23.03.26 15:16
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, ботаныч, Вы писали:


BFE>>>E.entities и E::entities — это доступ к разным значениям.

Б>> Это ирония ?? Ничего делать, в компайл-коснт классе появится какой-то там "."? еще и разный с class::foo ..
Б>>просто переписать компилятор, и всего-то, написать другой фактически. А зачем ? если уже есть ::

AI, предыдущийq промпт сработал лучше, но здесь тоже неплохо

Твое предложение звучит логично и эстетично, но давай называть вещи своими именами: ты предлагаешь не просто «улучшить синтаксис», а фундаментально переписать объектную модель C++.
Вот почему то, что ты описал — это не «эволюция», а создание нового языка:
Смешение сущностей и типов: В твоем примере E.entities или E.underlying_type обращаются к типу как к объекту первого класса через оператор точки. В текущем C++ типы и объекты живут в разных измерениях. Чтобы это заработало, нужно внедрить концепцию, где type — это полноценный объект (как в Python или Zig), что ломает всю классическую парадигму метапрограммирования.
Контекстная неоднозначность: Синтаксис [:e:] (сплайсинг) кажется комитету монструозным, но он решает критическую задачу: четко говорит компилятору, когда мы работаем с метаданными, а когда «впрыскиваем» их обратно в код. Без этого разделителя парсер сойдет с ума, пытаясь понять, является ли e.name строковым литералом или идентификатором новой переменной.
Отказ от шаблонов: Убирая template for, ты предлагаешь компилятору самому догадываться, какой цикл нужно развернуть в compile-time, а какой оставить для рантайма. Это лишает программиста явного контроля, который всегда был «священной коровой» C++.
Комитет идет по пути «химеры» именно потому, что они пытаются приклеить рефлексию к 40-летнему наследию, не ломая старый код. Ты же предлагаешь снести фундамент и построить на нем C++ с человеческим лицом, где типы — это объекты, а метапрограммирование не требует специальных ключевых слов. Это красиво, но это уже не тот C++, к которому привыкли стандартизаторы.
По сути, ты описываешь отказ от шаблонов в пользу чистого метапрограммирования, где всё есть объект. Ты готов к тому, что это фактически убьет обратную совместимость?
На какой компромисс ты бы пошел: оставить монструозный синтаксис, но получить рефлексию завтра, или ждать еще 10 лет идеального дизайна?


BFE>Никакая это не ирония. Два двоеточия ("::") — это переход по имени,

странное определение &classname::field_or_func — синт. выражение времени компиляции, запросто становится параметром шаблона, или складывающего в список типов аля template <typename... Mems> struct Meta; и еще несколько вариаций на эту тему. Впрочем для человека реализовавшего хотя бы один велосипед на эту тему, здесь нет вопросов, уже сейчас до 26-го стандарта. Чего аж вообще не скажешь за оператор точка, который без инстанса (за некоторыми исключениями) рантайма неупотребим.

BFE>а '.' — это доступ к свойству (к проперти, говоря на сленге).

В рантайме, если мы говорим о С++, а не абтрактном языке в вакууме.

BFE>Как их можно перепутать я представляю с трудом. "компайл-коснт" тут вообще ни причём.

Вы почитайте ответ ИИ (мы с ним во много совпадаем). Что там кто путал я не знаю, просто ваше выражение, аж совсем не про С++.
BFE>Нет никакой проблемы в том, чтобы операция доступа к свойствам объекта встречалась в любом контексте.
Это как никаких ? Достаточно написать пару грамматик для языка хотя бы имеющего функциональную полноту по Тьюрингу, чтобы иметь представление о разрешении конфликтов, чтобы понимать никакого "Нет никакой проблемы" в этой сфере не существует. А тут разговор про С++, в котором уже предостаточно контекстно зависимых сегментов. А вы именно, что предлагаете — "всего лишь" переписать язык, и менять концепции.

BFE>Вас же не смущает, что в коде можно написать sizeof(int) ? Я не вижу причин, почему всякий sizeof(int) нельзя заменить на выражение int.size.

Да все можно, в пределах разумного, вопрос, кто и сколько времени\денег на это потратит, и когда будет результат. Разговоры про compile time reflection идут давно и велосипедов было написано предостаточно, я сам реализовал парочку, на тех или иных хаках С++ компайлера, есть такая группа в бустовой рассылке — feature SG7. Так вот лучшее, что там получилось так это реализация CTR на базе llvm, с итерабильностью типов по неймспейсам, по мемберам впрочем вы можете зайти да поискать. Этот вариант на гитхабе есть.

BFE>Сейчас, за именем типа не может следовать одна точка (только троеточие), а за именем объекта не может следовать два двоеточия (только одно). Если не согласны — приводите пример.

BFE>Поэтому нет никаких проблем с тем, чтобы задействовать точку после имени.
Да не )) конечно никаких проблем, только это не про С++

BFE>Компилятор переписывать не надо, так как добавление точки — это расширение, а не изменение.

жаль я забыл свой промт на который ИИ выдал очень неплохой ответ, но я его почему-то удалил, вместе с промтом. Своими словами что-то вроде за тем, что автор называет "простым и понятным" стоит полное переписывание языка.
Впрочем я вас уверяю попробуйте реализовать хотя бы метаструктуру уже сейчас через макрос с __VA_ARGS__ сложить все мемберы класса в вариэдик, это делается относительно просто. Или грамматику на бизоне с контекстно зависимыми expression, после этой практики ваша уверенность в том, что "все просто" и "ничего менять не надо", станет много меньше.
Хотя можно и без макросов

struct extra
{
    void foo0(int, char) { std::cout << "Hello from Robot!" << std::endl; }
    std::string foo1() { return "Goodbye!"; }
    static void f002() {}
    int f0;
    std::string f1;
};

template <auto... Mems>
struct Meta
{
};

int main__()
{
    using extra_mems = Meta<&extra::foo0
        , &extra::foo1, &extra::f0, &extra::f1, &extra::f002>;
    return 0;
}
Отредактировано 24.03.2026 8:30 ботаныч . Предыдущая версия .
Re[8]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: rg45 СССР  
Дата: 23.03.26 20:59
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Два двоеточия ("::") — это переход по имени, а '.' — это доступ к свойству (к проперти, говоря на сленге).


Ну начинаются удивительные истории. Первый — оператор разрешения видимости (scope resolution operator), второй — оператор доступа к членам (member access operator) — членам-данным, членам-функциям, членам-шаблонам. И тот и другой можно обозначить как "переход по имени". Главное различие в том, что первый применяется к областям видимости (пространствам имен и классам), а второй — к объектам классов.

Причём, через "точку" можно обращаться в т.ч. и к статическим членам классов (главное, чтоб слева от точки было выражение, вычисляющееся в объект). Например: std::true_type{}.value — это обращение к статическому члену std::true_type::value. Или std::numeric_limits<double>{}.epsilon() — то же самое, что std::numeric_limits<double>::epsilon().
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 23.03.2026 21:25 rg45 . Предыдущая версия .
Re[9]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: ботаныч Интернет https://youtu.be/I3lhN5CUP2M
Дата: 24.03.26 08:46
Оценка:
Здравствуйте, rg45, Вы писали:

привет.

R>Причём, через "точку" можно обращаться в т.ч. и к статическим членам классов (главное, чтоб слева от точки было выражение, вычисляющееся в объект). Например: std::true_type{}.value — это обращение к статическому члену std::true_type::value. Или std::numeric_limits<double>{}.epsilon() — то же самое, что std::numeric_limits<double>::epsilon().


чисто формально std::numeric_limits<double>{}.epsilon() — здесь будет создан инстанс, по моему мнению. в отличии от ::
более близко выглядело бы ((std::numeric_limits<double>*)nullptr)->epsilon(), для статики.
Re[10]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: rg45 СССР  
Дата: 24.03.26 09:39
Оценка:
Здравствуйте, ботаныч, Вы писали:

Б>Здравствуйте, rg45, Вы писали:


Б>привет.


R>>Причём, через "точку" можно обращаться в т.ч. и к статическим членам классов (главное, чтоб слева от точки было выражение, вычисляющееся в объект). Например: std::true_type{}.value — это обращение к статическому члену std::true_type::value. Или std::numeric_limits<double>{}.epsilon() — то же самое, что std::numeric_limits<double>::epsilon().


Б> чисто формально std::numeric_limits<double>{}.epsilon() — здесь будет создан инстанс, по моему мнению. в отличии от ::


Разумеется, будет создан инстанс, по-моему, я и сам это ясно это обозначил: "главное, чтоб слева от точки было выражение, вычисляющееся в объект".

Хорошо, "то же самое" зачёркриваем. Оставляем только: "через оператор доступа к членам (точку) можно доступаться не только к инстансным, но и к статическим членам". Это было главной мыслью, которую я высказал для полноты картины использования этих двух операторов.

Б>более близко выглядело бы ((std::numeric_limits<double>*)nullptr)->epsilon(), для статики.


Во-первых, это уже другой оператор (->), о котором и речи не шло изначально. Во-вторых, здесь тоже будет создан "инстанс", т.к. указатель — это тоже объект (нулевой указатель в т.ч). Выигрыш по сравнению с созданием объекта пустой структуры сомнителен. В-третьих, я вот думаю, а не будет ли здесь UB (разыменовывание нулевого указателя)? Вот это не очень очевидно для меня — с одной стороны, разыменовывание налицо, с другой — доступа к области памяти, занимаемой объектом нет, this не используется даже формально.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 24.03.2026 10:46 rg45 . Предыдущая версия . Еще …
Отредактировано 24.03.2026 10:35 rg45 . Предыдущая версия .
Отредактировано 24.03.2026 10:31 rg45 . Предыдущая версия .
Отредактировано 24.03.2026 10:28 rg45 . Предыдущая версия .
Отредактировано 24.03.2026 10:16 rg45 . Предыдущая версия .
Отредактировано 24.03.2026 10:15 rg45 . Предыдущая версия .
Отредактировано 24.03.2026 10:12 rg45 . Предыдущая версия .
Отредактировано 24.03.2026 9:57 rg45 . Предыдущая версия .
Отредактировано 24.03.2026 9:55 rg45 . Предыдущая версия .
Re[11]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: ботаныч Интернет https://youtu.be/I3lhN5CUP2M
Дата: 25.03.26 07:35
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, ботаныч, Вы писали:


Б>>Здравствуйте, rg45, Вы писали:


Б>>привет.

R>Хорошо, "то же самое" зачёркриваем. Оставляем только: "через оператор доступа к членам (точку) можно доступаться не только к инстансным, но и к статическим членам". Это было главной мыслью, которую я высказал для полноты картины использования этих двух операторов.
Да я вообще хотел обойти пока стороной вопрос со статикой отмазавшись фразой

Чего аж вообще не скажешь за оператор точка, который без инстанса (за некоторыми исключениями) рантайма неупотребим.

в некоторые исключение как раз входила статика, constexpr, constval выражения в контексте decltype или sizeof(obj.field)

Б>>более близко выглядело бы ((std::numeric_limits<double>*)nullptr)->epsilon(), для статики.



R>Во-первых, это уже другой оператор (->), о котором и речи не шло изначально.

ближе, т.е. без создания инстанса (объекта)

R>Во-вторых, здесь тоже будет создан "инстанс", т.к. указатель — это тоже объект (нулевой указатель в т.ч).

разыменования здесь нет. здесь приведение nullptr к типу, в котором реализован статический метод.

R>Выигрыш по сравнению с созданием объекта пустой структуры сомнителен. В-третьих, я вот думаю, а не будет ли здесь UB (разыменовывание нулевого указателя)? Вот это не очень очевидно для меня — с одной стороны, разыменовывание налицо, с другой — доступа к области памяти, занимаемой объектом нет, this не используется даже формально.

собственно

В выражении ((std::numeric_limits<double>*)nullptr)->epsilon() никакой объект не будет инстанцирован.
Это происходит по следующим причинам:
Статическая природа: Функция epsilon() определена как static constexpr. В языке C++ вызов статического метода через указатель — это лишь синтаксический способ указать компилятору на конкретный тип. Разыменования указателя в реальности не происходит.
Работа компилятора: Для вызова этой функции компилятору достаточно знать тип (std::numeric_limits). Он подставляет значение константы прямо в место вызова еще на этапе компиляции.
Отсутствие UB: Так как фактического обращения к памяти по адресу nullptr не случается, это выражение безопасно и не вызывает неопределенного поведения.

для перехода в точку можно было бы написать (*(std::numeric_limits<double>*)nullptr).epsilon(), но тут уже UB, потому я написал самое близкое и корректное к std::numeric_limits<double>::epsilon().
Но самое забавное, что мы даже не это обсуждаем, мы обсуждаем совсем другую точку, которую предложил коллега B0FEE664.
А именно точка времени компиляции со некими скрытыми итерабильными свойствами времени компиляции. А это немного другой оператор.
Отредактировано 25.03.2026 7:39 ботаныч . Предыдущая версия .
Re[12]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: rg45 СССР  
Дата: 25.03.26 09:05
Оценка:
Здравствуйте, ботаныч, Вы писали:

R>>Во-вторых, здесь тоже будет создан "инстанс", т.к. указатель — это тоже объект (нулевой указатель в т.ч).

Б> разыменования здесь нет.

??? Где ты видишь в ЭТОМ моём высказывании слово "разыменовывание"? Здесь же про другое.

Б>здесь приведение nullptr к типу, в котором реализован статический метод.


Приведение к УКАЗАТЕЛЮ на объекты класса, в котором реализован статический метод, если говорить точнее. Результатом этого приведения является временный объект указателя соответствующего типа. Ещё раз: указатель — это объект, со всеми свойстами, присущими объектам (size, lifetime, storage duration). И размер указателя никак не меньше размера объекта пустой структуры. Скорее всего компилятор соптимизирует создание ненужных временных объектов (как указателя, так и объекта пустого класса), но это уже десятый вопрос.

Б>В выражении ((std::numeric_limits<double>*)nullptr)->epsilon() никакой объект не будет инстанцирован.


Смотри выше. Бутет СОЗДАН объект указателя. И слово "инстанцирование" в С++ обозначает создание воплощений шаблонов, но никак не создание объектов.

Б>более близко выглядело бы ((std::numeric_limits<double>*)nullptr)->epsilon(), для статики.

Б>разыменования здесь нет...
Б>для перехода в точку можно было бы написать (*(std::numeric_limits<double>*)nullptr).epsilon(), но тут уже UB, потому я написал самое близкое и корректное к std::numeric_limits<double>::epsilon().

На чём основаны эти утверждения? Или ты написал это просто потому, что тебе хочется в это верить? Ну так я тебя огорчу, стандарт C++ утверждает другое:

https://timsong-cpp.github.io/cppwp/expr.ref#2

The expression E1->E2 is converted to the equivalent form (*(E1)).E2; the remainder of [expr.ref] will address only the form using a dot.


Выражение E1->E2 ЭКВИВАЛЕНТНО выражению (*(E1)).E2 (если только операторы '->' и '*' не являются перегруженными функциями). И из этой эквивалентности следует, что разыменовывание указателя имеет место быть в обоих случаях. На счёт UB я по-прежнему не уверен, могу только сказать точно, что оно либо есть в обоих случаях, либо его нет, тоже в обоих случаях.

Б> Но самое забавное, что мы даже не это обсуждаем, мы обсуждаем совсем другую точку, которую предложил коллега B0FEE664.

Б>А именно точка времени компиляции со некими скрытыми итерабильными свойствами времени компиляции. А это немного другой оператор.

Ну так я и писал только о тех двух операторах, о которых шла речь: https://rsdn.org/forum/cpp/9068221.1
Автор: B0FEE664
Дата: 19.03 18:07
. Это ты зачем-то приплёл сюда третий.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 25.03.2026 10:21 rg45 . Предыдущая версия . Еще …
Отредактировано 25.03.2026 10:19 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 10:15 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 10:15 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:58 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:57 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:54 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:51 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:49 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:48 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:42 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:39 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:39 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:37 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:34 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:21 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:16 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:15 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:13 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 9:06 rg45 . Предыдущая версия .
Re[13]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: ботаныч Интернет https://youtu.be/I3lhN5CUP2M
Дата: 25.03.26 11:23
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, ботаныч, Вы писали:


R>>>Во-вторых, здесь тоже будет создан "инстанс", т.к. указатель — это тоже объект (нулевой указатель в т.ч).

Б>> разыменования здесь нет.

R>??? Где ты видишь в ЭТОМ моём высказывании слово "разыменовывание"? Здесь же про другое.

-третьих, я вот думаю, а не будет ли здесь UB (разыменовывание нулевого указателя)?

твоя фраза ?
это 1.
2. ты уводишь тему в разбор, что такое указатель. И ежу понятно, что указатель "имеет" и дестрвуктор, у него есть и прочее соответствующие методы по умолчанию, но память под это все выделяться не будет. т.к. скорее всего будет ссылаться на константную облаcть от типизированных nullptr. Хотя все это чисто для удобства в шаблонировании, и если тебе прилетает в шаблон в качестве template <typename T> void call(T ptr) { ...} using T = ObjectTypePtr*; // то можно вызывать ptr.~T(); //
к чему это обсуждать ? тема несколько вообще про джругое

R>Приведение к УКАЗАТЕЛЮ на объекты класса, в котором реализован статический метод, если говорить точнее. Результатом этого приведения является временный объект указателя соответствующего типа. Ещё раз: указатель — это объект, со всеми свойстами, присущими объектам (size, lifetime, storage duration). И размер указателя никак не меньше размера объекта пустой структуры. Скорее всего компилятор соптимизирует создание ненужных временных объектов (как указателя, так и объекта пустого класса), но это уже десятый вопрос.


Б>>В выражении ((std::numeric_limits<double>*)nullptr)->epsilon() никакой объект не будет инстанцирован.


R>Смотри выше. Бутет СОЗДАН объект указателя. И слово "инстанцирование" в С++ обозначает создание воплощений шаблонов, но никак не создание объектов.

) выше там про reflection по теме, нет у меня времени обсуждать вещи очевидные, инстанцияация шаблонов и инстанса объекта класса, вполне корректные высказывания же) а инстанс, он инстанциируется. Коечно вещи разные с инстанциацией шаблона

Б>>более близко выглядело бы ((std::numeric_limits<double>*)nullptr)->epsilon(), для статики.

Б>>разыменования здесь нет...
Б>>для перехода в точку можно было бы написать (*(std::numeric_limits<double>*)nullptr).epsilon(), но тут уже UB, потому я написал самое близкое и корректное к std::numeric_limits<double>::epsilon().

R>На чём основаны эти утверждения? Или ты написал это просто потому, что тебе хочется в это верить? Ну так я тебя огорчу, стандарт C++ утверждает другое:


R>https://timsong-cpp.github.io/cppwp/expr.ref#2


R>

R>The expression E1->E2 is converted to the equivalent form (*(E1)).E2; the remainder of [expr.ref] will address only the form using a dot.



R>Выражение E1->E2 ЭКВИВАЛЕНТНО выражению (*(E1)).E2

Это в теории, а на практике я встречал ситуации падение сразу после разыменования указателя. И в тоже время -> работал без проблем, даже с нестатическими методами, если в методе не было обращений к полям инстанса класса (невалидного).

R>(если только операторы '->' и '*' не являются перегруженными функциями). И из этой эквивалентности следует, что разыменовывание указателя имеет место быть в обоих случаях. На счёт UB я по-прежнему не уверен, могу только сказать точно, что оно либо есть в обоих случаях, либо его нет, тоже в обоих случаях.

Ага, особенно если посадят куда-то внутрь клауд системы, и ты свою утилзу будешь запускать на каких-то экзотических стойках с такими-же экзотическими процами.

R>Ну так я и писал только о тех двух операторах, о которых шла речь: https://rsdn.org/forum/cpp/9068221.1
Автор: B0FEE664
Дата: 19.03 18:07
. Это ты зачем-то приплёл сюда третий.

А может мне просто захотелось с тобой поговорить .. )) под знакомым тебе эккаунтом я не могу — заблочен, за
  термин
https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B3%D1%83%D0%BB%D1%8C

такое ))

Меня интересует когда, и как оно появится, уж очень хочется пощупать.
Отредактировано 25.03.2026 11:29 ботаныч . Предыдущая версия .
Re[14]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: rg45 СССР  
Дата: 25.03.26 11:55
Оценка:
Здравствуйте, ботаныч, Вы писали:


R>>>>Во-вторых, здесь тоже будет создан "инстанс", т.к. указатель — это тоже объект (нулевой указатель в т.ч).

Б>>> разыменования здесь нет.

R>>??? Где ты видишь в ЭТОМ моём высказывании слово "разыменовывание"? Здесь же про другое.

Б>

Б>-третьих, я вот думаю, а не будет ли здесь UB (разыменовывание нулевого указателя)?

Б> твоя фраза ?

Конечно моя, но отвечаешь же ты не на эту, а на другую.



Б>это 1.

Б>2. ты уводишь тему в разбор, что такое указатель.

Ничего я никуда не увожу, говорю строго по факту того, что говоришь ты.

Б> И ежу понятно, что указатель "имеет" и дестрвуктор, у него есть и прочее соответствующие методы по умолчанию, но память под это все выделяться не будет.


Под что не будет выделяться память, под указатель??? То есть у указателя есть size и storage duration, но память выделяться не будет?

Б> т.к. скорее всего будет ссылаться на константную облаcть от типизированных nullptr.


А "константная область" — это не память что ли? "Скорее всего" никаких объектов вообще не будет создано, ибо незачем. Только это никак не делает твои высказывания (цитировать не стану) корректными.

Б> Хотя все это чисто для удобства в шаблонировании, и если тебе прилетает в шаблон в качестве template <typename T> void call(T ptr) { ...} using T = ObjectTypePtr*; // то можно вызывать ptr.~T(); //


Что за ... ???

R>>https://timsong-cpp.github.io/cppwp/expr.ref#2


R>>

R>>The expression E1->E2 is converted to the equivalent form (*(E1)).E2; the remainder of [expr.ref] will address only the form using a dot.


Б> Это в теории, а на практике я встречал ситуации падение сразу после разыменования указателя. И в тоже время -> работал без проблем, даже с нестатическими методами, если в методе не было обращений к полям инстанса класса (невалидного).


По сути ты мне сейчас говоришь: "не смотри в документ, слушай, что я тебе говорю". Так? Ну и почему я должен учитывать твой опыт с бОльшим приоритетом, чем стандарт языка?

Б> И в тоже время -> работал без проблем, даже с нестатическими методами, если в методе не было обращений к полям инстанса класса (невалидного).


И кстати, вот это просто хрестоматийный случай UB, который здесь уже жёван-пережёван не один раз на протяжении многих лет. То, что ты используешь подобный говнокод (даже если не используешь, а просто пытаешься строить на этом какие-то рассуждения и делать какие-то выводы) красноречиво говорит о твоей квалификации и о твоей экспертности.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 25.03.2026 12:18 rg45 . Предыдущая версия . Еще …
Отредактировано 25.03.2026 12:15 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 12:08 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 12:04 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 12:03 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 11:59 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 11:58 rg45 . Предыдущая версия .
Re[15]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: ботаныч Интернет https://youtu.be/I3lhN5CUP2M
Дата: 25.03.26 14:26
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, ботаныч, Вы писали:



R>>>>>Во-вторых, здесь тоже будет создан "инстанс", т.к. указатель — это тоже объект (нулевой указатель в т.ч).

Б>>>> разыменования здесь нет.

R>>>??? Где ты видишь в ЭТОМ моём высказывании слово "разыменовывание"? Здесь же про другое.

Б>>

Б>>-третьих, я вот думаю, а не будет ли здесь UB (разыменовывание нулевого указателя)?

Б>> твоя фраза ?

R>Конечно моя, но отвечаешь же ты не на эту, а на другую.

ну так она же звучит в контексте.

R>Ничего я никуда не увожу, говорю строго по факту того, что говоришь ты.

уводишь уводишь, я говорю компайл тайм рефлекшине, о чем ты? О памяти ?

R>Под что не будет выделяться память, под указатель??? То есть у указателя есть size и storage duration, но память выделяться не будет?

под указатель под указатель.

Б>> т.к. скорее всего будет ссылаться на константную облаcть от типизированных nullptr.


R>А "константная область" — это не память что ли? "Скорее всего" никаких объектов вообще не будет создано, ибо незачем. Только это никак не делает твои высказывания (цитировать не стану) корректными.


R>Что за ... ???

call(T ptr) { ptr.~T(); } злой ты .. не буду я с тобой дальше говорить — не о чем. свел беседу о CTR в мурыжыние об указателях.

R>>>https://timsong-cpp.github.io/cppwp/expr.ref#2


R>>>

R>>>The expression E1->E2 is converted to the equivalent form (*(E1)).E2; the remainder of [expr.ref] will address only the form using a dot.



R>По сути ты мне сейчас говоришь: "не смотри в документ, слушай, что я тебе говорю". Так? Ну и почему я должен учитывать твой опыт с бОльшим приоритетом, чем стандарт языка?

Нет я говорю, — не морочь мне голову в тех вопросах, в которых я без тебя неплохо разбираюсь и говори по теме. И намекнул, что стандарт стандартом, а реальность реальностью. Больше ничего. ратовать за правду и стандарт, это правильно, желаю удачи в описанных мною кейсах. Сядешь и будешь махать бумажкой стандарта, когда у тебя будет валиться стойка. С описанными багами.

R>И кстати, вот это просто хрестоматийный случай UB,

Перечитай выше, а лучше сходи еще посмотри на деревья с пулевыми отверстиями которых ты не нашел ...

R>который здесь уже жёван-пережёван не один раз на протяжении многих лет. То, что ты используешь подобный говнокод (даже если не используешь, а просто пытаешься строить на этом какие-то рассуждения и делать какие-то выводы) красноречиво говорит о твоей квалификации и о твоей экспертности.

кто сказал, что я не понимаю, что это UB? равно как и (*E).foo();
давай так, эксперт ? покажи свой велосипед по CTR. Много где использовал? Сколько вариантов

П.С. я себя вообще себя экспертом не считаю, мне ставят задачу, и я ее решаю. У меня инфраструктурные построения в архитектуре С++, вообще почти всегда в компайл тайме. Где такие баги как ты описываешь в принципе не появляются.
Если тебе пофигу на CTR, тол не мешай пообщать с теми кому нет.
Хотя CTR высоко-концептуальная фича, не обсуждать это а лезть в рантайм)), это ты же первый начал тут за рантайм в этом контексте?? Эксперт ..

собраюсь вот сделать на основе этой CTR. Позарегаю типы, на основе механизма, чем-то напоминает, тот вариант что предлагал ремарк, только проще чтобы в тайплисты пособирать всю мета, и там будет дальше с компайл тайм строками. Буду пытаться запустить велосипед в космос.
struct extra
{
    void foo0(int, char) { }
    std::string foo1() { return ""; }
    static void f002() {}
    int f0;
    std::string f1;
};

template <auto... Mems>
struct Meta
{
};

template <typename T> void print_type() {
#pragma message (__FUNCSIG__)
}

int main__()
{
    using extra_mems = Meta<&extra::foo0
        , &extra::foo1, &extra::f0, &extra::f1, &extra::f002>;
print_type<extra_mems>();
    return 0;
}


  кстатиЮ на счет строк там тоже срач с тобой вышел
помнится по этому поводжу с тобой тоже какой то срач вышел.
Вместо конструктивной беседы, я грю __PRETY_FUNCTION__ и __FUNCSIG__ вещи разные принципиально тем, что pragma message одну берет, а другую нет, и на основе __FUNCSIG__ можно дебажить инстанциацию шаблонов, а на основе __PRETY_FUNCTION__ нгет. а ты как вцепился в какую то чушь.
Отредактировано 25.03.2026 14:47 ботаныч . Предыдущая версия . Еще …
Отредактировано 25.03.2026 14:31 ботаныч . Предыдущая версия .
Re[16]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: rg45 СССР  
Дата: 25.03.26 15:15
Оценка:
Здравствуйте, ботаныч, Вы писали:

R>>Ничего я никуда не увожу, говорю строго по факту того, что говоришь ты.

Б> уводишь уводишь, я говорю компайл тайм рефлекшине, о чем ты? О памяти ?

Ты не говоришь о рефлекшене, ты решил пофлудить в профильном форуме, как тот Шмж. Мне эта пустая болтовня не была интересна с самого начала и я не собирался в этом участвовать. Я просто не смог пройти мимо вот этого высказывания:

https://rsdn.org/forum/cpp/9068221.1
Автор: B0FEE664
Дата: 19.03 18:07


Два двоеточия ("::") — это переход по имени, а '.' — это доступ к свойству


Вот и всё. Всё, что я говорил, касалось только вот этих "точек" — их смысла и сценариев их использования. К тебе я даже не обращался, чего ты прилип как банный лист?
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 25.03.2026 15:27 rg45 . Предыдущая версия . Еще …
Отредактировано 25.03.2026 15:26 rg45 . Предыдущая версия .
Отредактировано 25.03.2026 15:19 rg45 . Предыдущая версия .
Re[17]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: ботаныч Интернет https://youtu.be/I3lhN5CUP2M
Дата: 25.03.26 19:06
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, ботаныч, Вы писали:


R>>>Ничего я никуда не увожу, говорю строго по факту того, что говоришь ты.

Б>> уводишь уводишь, я говорю компайл тайм рефлекшине, о чем ты? О памяти ?

R>Ты не говоришь о рефлекшене, ты решил пофлудить в профильном форуме, как тот Шмж.

Ну ты меня сравнил )) Шмж задает детские вопросы по плюсам и вряд-ли поймет мой код )))
И с каких это пор мессаджи с кодом (рабочим) в контексте стали флудом?
Сомневаешься что у меня есть то, что я описал ? https://rsdn.org/forum/cpp/4713560.1
Автор: sept_tone
Дата: 23.04.12



блин посмотри гоьд )))? 23.04.12 13 лет назад жопа. И ты хочешь, чтобы я обошел эту тему .. и промолчал, да оно меня касается экзистенциально. ))

на почитай (скомпилируй = запусти), я на днях проверял этот механизм работает под MSVS (хотя писался под gcc, думаю и там отработает, хотя не проверял). И этот "хак" пользовался и работает уже много лет в разных компиляторах, а ты мне, я помню как-то написал, много лет назад "ну расскажи нам за SFINAE" — ну вот рассказываю. Эта регистрация инкапсулирует все типы в компайл тайм лист. далее еще пару финтов — и CTR с коробки бесплатно — держи. А почему актуально? Потому как вот оно уже в стандарте, т.е если реализовать велосипед сейчас (это с большой долей вероятности даст прорыв в некотрых областях проекта, сериализация, маршалинг, построение всяких клиент сервер систем — аля webservice COM COM+ .. client services на базе dbas etc.) Это я просто описал где я этот код внедрялся в том или ином виде. Даже в языке для искусственного интеллекта — я реализовывал с использованием compile time refliction на базе этого (ну в вариациях)))) от это флуд?))

R>Мне эта пустая болтовня

Пустая ?))) Ну это тебе к комитету, а я говорю, что это переломит во многом ситуацию в отношении языков, что имеют reflection. И в купе с ИИ агентами может здорово разогреть ситуацию в архитектуре

R>не была интересна с самого начала и я не собирался в этом участвовать. Я просто не смог пройти мимо вот этого высказывания:

R>https://rsdn.org/forum/cpp/9068221.1
Автор: B0FEE664
Дата: 19.03 18:07

1. Так яж говорю, тебе похрен CTR
2. тут cjdctv другая точка ))

R>

R>Два двоеточия ("::") — это переход по имени, а '.' — это доступ к свойству


R>Вот и всё. Всё, что я говорил, касалось только вот этих "точек"

рантаймовых точек, а не точек через которые обращаются к метаданным объекта в компайл тайм, что ломает объектную модель С++ с проекцией в реализации на годы еще ... главное, только появилось. Ну ничего время рассудит. Когда начнут появляться обертки аля std::pack_object_to_send(std::extract_meta(obj)) будет понятно кто флудил )

R>- их смысла и сценариев их использования. К тебе я даже не обращался, чего ты прилип как банный лист?

Я прилип?)) ладно давай, ты нормальный мужик, я тоже. мы вполне по-дружески с тобой общались по телефону, чего нам делить ?
обязуюсь каркас ближайшего (если успею) реализации CTR с учетом сегодняшних реалий компиляторов выкласть
Отредактировано 25.03.2026 19:10 ботаныч . Предыдущая версия .
Re[18]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: rg45 СССР  
Дата: 25.03.26 20:22
Оценка: +1
Здравствуйте, ботаныч, Вы писали:

Б> Я прилип?)) ладно давай, ты нормальный мужик, я тоже. мы вполне по-дружески с тобой общались по телефону, чего нам делить ?


Без обид
--
Справедливость выше закона. А человечность выше справедливости.
Re[9]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: B0FEE664  
Дата: 25.03.26 20:35
Оценка:
Здравствуйте, ботаныч, Вы писали:

BFE>>Никакая это не ирония. Два двоеточия ("::") — это переход по имени,

Б> странное определение
Оно намерено сделано таким, чтобы не увязнуть в терминологии.

Б>Чего аж вообще не скажешь за оператор точка, который без инстанса (за некоторыми исключениями) рантайма неупотребим.

Именно. И на этом можно сыграть.

BFE>>а '.' — это доступ к свойству (к проперти, говоря на сленге).

Б> В рантайме, если мы говорим о С++, а не абтрактном языке в вакууме.
Правильно. Поэтому логично сделать так же для доступа к свойствам метаобъекта, что существует только в компайл тайме.

BFE>>Как их можно перепутать я представляю с трудом. "компайл-коснт" тут вообще ни причём.

Б> Вы почитайте ответ ИИ (мы с ним во много совпадаем). Что там кто путал я не знаю, просто ваше выражение, аж совсем не про С++.
ИИ всё ещё остаётся слабым, поэтому опираться на его результаты относительно ещё несуществующих понятий не имеет смысла.

BFE>>Нет никакой проблемы в том, чтобы операция доступа к свойствам объекта встречалась в любом контексте.

Б> Это как никаких ? Достаточно написать пару грамматик для языка хотя бы имеющего функциональную полноту по Тьюрингу, чтобы иметь представление о разрешении конфликтов, чтобы понимать никакого "Нет никакой проблемы" в этой сфере не существует. А тут разговор про С++, в котором уже предостаточно контекстно зависимых сегментов. А вы именно, что предлагаете — "всего лишь" переписать язык, и менять концепции.
Это всё общие слова. Давайте конкретный пример, где предложенный доступ ломает синтаксис языка.

BFE>>Вас же не смущает, что в коде можно написать sizeof(int) ? Я не вижу причин, почему всякий sizeof(int) нельзя заменить на выражение int.size.

Б> Да все можно, в пределах разумного, вопрос, кто и сколько времени\денег на это потратит, и когда будет результат.
Это не аргумент.

BFE>>Сейчас, за именем типа не может следовать одна точка (только троеточие), а за именем объекта не может следовать два двоеточия (только одно). Если не согласны — приводите пример.

BFE>>Поэтому нет никаких проблем с тем, чтобы задействовать точку после имени.
Б> Да не )) конечно никаких проблем, только это не про С++
Почему не про С++?

BFE>>Компилятор переписывать не надо, так как добавление точки — это расширение, а не изменение.

Б> жаль я забыл свой промт на который ИИ выдал очень неплохой ответ, но я его почему-то удалил, вместе с промтом. Своими словами что-то вроде за тем, что автор называет "простым и понятным" стоит полное переписывание языка.
Вы что? Доверяете ИИ?

Б>Впрочем я вас уверяю попробуйте реализовать хотя бы метаструктуру

Допустим я это реализовал. Что это изменит?
И каждый день — без права на ошибку...
Re[5]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: B0FEE664  
Дата: 25.03.26 21:31
Оценка:
Здравствуйте, ботаныч, Вы писали:

BFE>>Комитетчики добавили это для метаданных? Нет, они пишут сначала преобразование всего имени в метаобъект, а потом используют сишный (!) доступ к его свойствам:

Б> сишный доступ для компайлтайм звучит как прокрутить фарш обратно
Да, меня от этого подхода тоже коробит.

BFE>>Эта запись должна выглядеть так:

BFE>>E.entities
Б> Шарпофщина какая-то, это там к "вложенным типам" обращаются через точку, в плюсах привычнее с::m
Это не обращение к вложенному типу. Это доступ к свойству типа.

Б> я сомневаюсь, что без наличия под рукой текущий компилятор с тем, чтобы ззаранее проверить какие синтаксические нагрузки надо добавить, что-бы разрешить появляющиеся в нем конфликты. Я так подозреваю, гонка на реализацию рефлекшина стартанула, а там уже подтянется первым ) того и тапки

Ага. Гонят, вместо того, чтобы работать.

BFE>>Далее, template for не нужен.

Б> в gcc часто надо добавлять typename при обращении к вложенному темплиту... using type_ = some_struct::typename calc_some_type<type_arg>::type; а мелкомягких не надо. Вы же говорите об этом, "как вам заблагорассудится", не зная, чем чревато.
Скажите, вас не смущает, что в следующем примере template перед for отсутствует, хотя цикл выполняется во время компиляции?
#include <array>
#include <cstddef>

consteval int sum_upto(int n) {
    int result = 0;
    for (int i = 1; i <= n; ++i) {
        result += i;
    }
    return result;
}

int main() {
    // Вычисляется на этапе компиляции
    constexpr int value = sum_upto(10);
    static_assert(value == 55);
    return value;
}



Б> мне так не кажется, получается, что мы заморачиваемся еще к куче всевозможных кейсам по модификации типов операторами доступа и прочим, что ломает уже существующие парадигмы.

Приведите пример такой парадигмы.

Б>которую вы привели, отражает одну из самых горячих дискуссий в сообществе C++. Это классический конфликт между «прагматичным дизайном» (как это могло бы быть в идеальном новом языке) и «дизайном комитета», скованным обратной совместимостью и необходимостью вписать метапрограммирование в существующую грамматику.

Б>Вот несколько тезисов в ответ на этот разбор:
Б>1. Синтаксис ^E vs E.entities
Б>Автор прав: запись E.entities выглядит естественнее. Однако в C++ точка (.) зарезервирована для доступа к членам объекта. Если разрешить E.entities, где E — тип, возникает неоднозначность с static полями.
Это не так. Нет такого конфликта. Приведите пример, если думаете иначе. Однако "Автор прав"

Б>Комитет выбрал оператор отражения ^ (reflection operator), чтобы четко разграничить: «сейчас мы работаем не с типом, а с его метаданным описанием». Это позволяет избежать перегрузки парсера, но, безусловно, выглядит «инородно».

С++ не для слабаков. Да.

Б>2. Сплайсинг [:e:] и метаобъекты

Б>Автор утверждает, что e.value достаточно. Но в текущем черновике рефлексии (P2996) e — это не сам объект, а «дескриптор» (handle) метаобъекта.
Б>Сплайсинг ([:e:]) — это мост из мира метаданных обратно в мир кода.
Б>Без явного сплайсинга компилятору было бы крайне сложно понять, когда вы хотите получить свойство метаобъекта, а когда — превратить метаобъект в реальное выражение (expression), которое можно использовать в коде.
Если слева от точки стоит тип, то это обращение к метаобъекту, если слева от точки стоит имя переменной, то это обращение с свойству переменной. Что тут сложного?

Б>3. template for vs обычный for

Б>Здесь автор затронул фундаментальную проблему. Обычный for в C++ порождает цикл в рантайме. Чтобы превратить итерацию по метаданным в развернутый код (unrolling) или генерацию разных типов на каждой итерации, нужен специальный маркер.
Б>Если оставить обычный for, компилятору придется проводить сложнейший анализ, чтобы понять: «ага, это цикл по константам, я должен его развернуть».
Б>template for явно говорит: «это генерация кода». Это делает поведение предсказуемым.
См. пример выше.

Б>4. consteval vs constexpr

Б>Автор абсолютно прав в том, что функции, работающие исключительно с метаданными, должны быть consteval. В C++20/23 constexpr функция может быть вызвана в рантайме, а рефлексия в рантайме невозможна. Использование consteval здесь — это не просто хороший тон, а гарантия того, что код не «протечет» в исполняемый файл.
Автор уже "абсолютно прав"

Б>5. Философский вопрос: Революция или Эволюция?

Б>Критика про «монструозную химеру» обоснована. C++ пытается внедрить мощнейшую систему метапрограммирования, не ломая парсеры, написанные 30 лет назад.
Б>Подход автора (в стиле C# или Swift) требует полной переработки модели типов.
Б>Подход комитета — это попытка дать программисту «низкоуровневый ассемблер для типов». Это мощно, но страшно на вид.
Б>Итог
Б>Предложенный автором вариант (E.entities, e.value) — это путь языка с сильной встроенной интроспекцией (как Zig или частично Rust). Путь C++ — это путь библиотечного метапрограммирования, где через страшные символы (^, [: :]) даются фундаментальные возможности, на которых потом напишут красивые обертки.
Б>Согласны ли вы с тем, что C++ стоило бы пожертвовать совместимостью ради чистоты синтаксиса, или гибкость текущего (пусть и сложного) подхода важнее?
Б>[/q]
Б> Оно там вопрос задает, ..
Удивительное рядом.
Где, опять же, жертвенность? В чём она? Это же бред ИИ.
Что же касается "красивых оберток", то покажите мне красивую обёртку вокруг std::filesystem или для std::condition_variable, хотя бы.

Б>На счет вашей надежды, что оно завязнет. посмотрим, есть надежда (вполне ощутимые), когда начнут появляться хибернейты, когда реляционные структуры с запросами в SQL с проверкой на этапе компиляции, регекспы с встраеваемыми объектами в запрос ...

Да нет у меня никакой "надежды". Первый раз, что ли, комитет занимается фигнёй, которой никто не будет пользоваться? Вспомните, хотя бы, про спецификацию исключений.
И каждый день — без права на ошибку...
Re[9]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: B0FEE664  
Дата: 25.03.26 21:48
Оценка:
Здравствуйте, rg45, Вы писали:

BFE>>Два двоеточия ("::") — это переход по имени, а '.' — это доступ к свойству (к проперти, говоря на сленге).

R>Ну начинаются удивительные истории.
Что тут удивительного? Впрочем, это дело вкуса.

Вам правда вот этот синтаксис
auto minVal = std::numeric_limits<std::underlying_type_t<E>>::max();
std::meta::enumerators_of(^E)
нравится больше этого:
auto minVal = E.underlying_type.max_value;
E.entities
?
Или есть какое-то ещё предложение?
И каждый день — без права на ошибку...
Re[10]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: rg45 СССР  
Дата: 25.03.26 21:53
Оценка: 1 (1)
Здравствуйте, B0FEE664, Вы писали:

BFE>>>Два двоеточия ("::") — это переход по имени, а '.' — это доступ к свойству (к проперти, говоря на сленге).

R>>Ну начинаются удивительные истории.
BFE>Что тут удивительного? Впрочем, это дело вкуса.

BFE>Вам правда вот этот синтаксис

BFE>auto minVal = std::numeric_limits<std::underlying_type_t<E>>::max();
BFE>std::meta::enumerators_of(^E)
BFE>нравится больше этого:
BFE>auto minVal = E.underlying_type.max_value;
BFE>E.entities
BFE>?
BFE>Или есть какое-то ещё предложение?

Я не готов дискутировть по поводу синтаксиса компайл-тайм рефлексии, я же писал. Просто не успел ещё выработать мнения. Чтоб это мнение выработать, нужно с этим поработать. А вот такое вольное жонглирование терминами в отношении операторов '::' и '.' ("переход по имени", "доступ к свойству") мне не понравилось, вот об этом я и высказался. И только об этом.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 25.03.2026 21:56 rg45 . Предыдущая версия .
Re[6]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: ботаныч Интернет https://youtu.be/I3lhN5CUP2M
Дата: 26.03.26 03:09
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, ботаныч, Вы писали:


BFE>>>Комитетчики добавили это для метаданных? Нет, они пишут сначала преобразование всего имени в метаобъект, а потом используют сишный (!) доступ к его свойствам:

Б>> сишный доступ для компайлтайм звучит как прокрутить фарш обратно
BFE>Да, меня от этого подхода тоже коробит.
это не сишный вызов, этор метаметод в с++;

BFE>>>Эта запись должна выглядеть так:

BFE>>>E.entities
Б>> Шарпофщина какая-то, это там к "вложенным типам" обращаются через точку, в плюсах привычнее с::m
BFE>Это не обращение к вложенному типу. Это доступ к свойству типа.
Ага )) https://onlinegdb.com/8pjntt4PN
#include <stdio.h>

struct SomeIdentifier {}; 

constexpr int IsBool()
{
    struct SomeIdentifier1 { enum { entity = 5}; };
    SomeIdentifier1 SomeIdentifier;
    return SomeIdentifier.entity;
}

//просто Это не доля слабаков. 

int main()
{
    return IsBool();
}


BFE>Ага. Гонят, вместо того, чтобы работать.

"Ага", это у вас ... про блин спать хочу.

BFE>>>Далее, template for не нужен.

)) вы пытаетесь играть в Чепаева там, где играют в шахматы.

Б>> в gcc часто надо добавлять typename при обращении к вложенному темплиту... using type_ = some_struct::typename calc_some_type<type_arg>::type; а мелкомягких не надо. Вы же говорите об этом, "как вам заблагорассудится", не зная, чем чревато.

BFE>Скажите, вас не смущает, что в следующем примере template перед for отсутствует, хотя цикл выполняется во время компиляции?
Я пропускаю этот код не относящийся к теме, сорри. Меня не смущает.

BFE>Приведите пример такой парадигмы.

А я привел, смотрите выше, вам моих велосипедов еще подкинуть ? Мнее минимализм комитета вообще понятен. Вы же должны помнить как появлялся новый стандарт std ? Просто скопировали бустовые велосипеды, ну вот примерно так-же мне и понятен сбор меты и его использование. А появление оного в стандарте вызывает у меня, просто ... я вообще думал тут праздник начнется с фейерверками )) ну ниче ща я даже песенку по этому поводу заброшу ) https://youtu.be/ttQHl1VsqFw
..

Б>>которую вы привели, отражает одну из самых горячих дискуссий в сообществе C++. Это классический конфликт между «прагматичным дизайном» (как это могло бы быть в идеальном новом языке) и «дизайном комитета», скованным обратной совместимостью и необходимостью вписать метапрограммирование в существующую грамматику.

Б>>Вот несколько тезисов в ответ на этот разбор:
Б>>1. Синтаксис ^E vs E.entities
Б>>Автор прав: запись E.entities выглядит естественнее. Однако в C++ точка (.) зарезервирована для доступа к членам объекта. Если разрешить E.entities, где E — тип, возникает неоднозначность с static полями.

BFE>Это не так. Нет такого конфликта. Приведите пример, если думаете иначе. Однако "Автор прав"

конечно нет ))) вообще в грамматиках если че поменяешь конфликтов нет... ))!! браво!!!

Б>>Комитет выбрал оператор отражения ^ (reflection operator), чтобы четко разграничить: «сейчас мы работаем не с типом, а с его метаданным описанием». Это позволяет избежать перегрузки парсера, но, безусловно, выглядит «инородно».

BFE>С++ не для слабаков. Да.
можно просто улыбнуться )) жду велосипеда по CTR, или грамматику языка с полнотой по Тьюрингу. )

Б>>2. Сплайсинг [:e:] и метаобъекты

Б>>Автор утверждает, что e.value достаточно. Но в текущем черновике рефлексии (P2996) e — это не сам объект, а «дескриптор» (handle) метаобъекта.
Б>>Сплайсинг ([:e:]) — это мост из мира метаданных обратно в мир кода.
Б>>Без явного сплайсинга компилятору было бы крайне сложно понять, когда вы хотите получить свойство метаобъекта, а когда — превратить метаобъект в реальное выражение (expression), которое можно использовать в коде.
BFE>Если слева от точки стоит тип, то это обращение к метаобъекту, если слева от точки стоит имя переменной, то это обращение с свойству переменной. Что тут сложного?
см на пример выше. вы когда грамматически обоснуете, чи там переменная, или тип, или другой типа в скоупе ... напишите грамматику, и будет с вас. )) а мне уже влом отвечать. я видите ли контекстно зависимые синтаксические выражения нюхом чую.

Б>>3. template for vs обычный for

Б>>Здесь автор затронул фундаментальную проблему. Обычный for в C++ порождает цикл в рантайме. Чтобы превратить итерацию по метаданным в развернутый код (unrolling) или генерацию разных типов на каждой итерации, нужен специальный маркер.
Б>>Если оставить обычный for, компилятору придется проводить сложнейший анализ, чтобы понять: «ага, это цикл по константам, я должен его развернуть».
Б>>template for явно говорит: «это генерация кода». Это делает поведение предсказуемым.
BFE>См. пример выше.
см ответ про typename перед дочерним типом | выражением | etc ... в gcc. Эта синтаксическая нагрузка меня не беспокоит аж совсем. Вас беспокоит ? В бой )) против комитета ... ) Можем обсудить, что такое стандарт, как появляется ... кстати тут в тему пойдет, экспорт шаблонов реализованный в EDG, но не вошедший в стандарт.

Б>>4. consteval vs constexpr

Б>>Автор абсолютно прав в том, что функции, работающие исключительно с метаданными, должны быть consteval. В C++20/23 constexpr функция может быть вызвана в рантайме, а рефлексия в рантайме невозможна. Использование consteval здесь — это не просто хороший тон, а гарантия того, что код не «протечет» в исполняемый файл.
BFE>Автор уже "абсолютно прав"
это вас по голове погладили, сказав перед тем, что вы предлагаете сломать объектную модель.

Б>>5. Философский вопрос: Революция или Эволюция?

Б>>Критика про «монструозную химеру» обоснована. C++ пытается внедрить мощнейшую систему метапрограммирования, не ломая парсеры, написанные 30 лет назад.
Б>>Подход автора (в стиле C# или Swift) требует полной переработки модели типов.
Б>>Подход комитета — это попытка дать программисту «низкоуровневый ассемблер для типов». Это мощно, но страшно на вид.
Б>>Итог
Б>>Предложенный автором вариант (E.entities, e.value) — это путь языка с сильной встроенной интроспекцией (как Zig или частично Rust). Путь C++ — это путь библиотечного метапрограммирования, где через страшные символы (^, [: :]) даются фундаментальные возможности, на которых потом напишут красивые обертки.
Б>>Согласны ли вы с тем, что C++ стоило бы пожертвовать совместимостью ради чистоты синтаксиса, или гибкость текущего (пусть и сложного) подхода важнее?
Б>>[/q]
Б>> Оно там вопрос задает, ..
BFE>Удивительное рядом.
BFE>Где, опять же, жертвенность? В чём она? Это же бред ИИ.
BFE>Что же касается "красивых оберток", то покажите мне красивую обёртку вокруг std::filesystem
Вообще без проблем шо вам написать ? сколько тенге?

BFE>или для std::condition_variable, хотя бы.

))) я бесплатно код не пишу, только музыку .. (сакс, гитара, фано контпробасс.. etc) ..
да вот правда сорри на телефон писал, могу сыграть так, что ушки завернутся
https://youtu.be/ttQHl1VsqFw

Б>>На счет вашей надежды, что оно завязнет. посмотрим, есть надежда (вполне ощутимые), когда начнут появляться хибернейты, когда реляционные структуры с запросами в SQL с проверкой на этапе компиляции, регекспы с встраеваемыми объектами в запрос ...

BFE>Да нет у меня никакой "надежды". Первый раз, что ли, комитет занимается фигнёй, которой никто не будет пользоваться? Вспомните, хотя бы, про спецификацию исключений.
))) какбы так описать, ну не сделает комитет, я буду продолжать зарабатывать на велосипедах (и скрещу в солюшинах с ИИ), сделает ... будет еще интереснее скрещу стандарт с ИИ )) вам что написать?))). ой сколько у меня этих велосипедов, что упрощали мне жизнь, и создавали syntax barier, за которым жилось вполне комфортно в realisation time. у таких как я видите-ли, винвин.
Re[7]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: B0FEE664  
Дата: 27.03.26 15:25
Оценка:
Здравствуйте, ботаныч, Вы писали:

Б> это не сишный вызов, этор метаметод в с++;

А почему он выглядит как вызов сишной функции?

  Скрытый текст
BFE>>>>Эта запись должна выглядеть так:
BFE>>>>E.entities
Б>>> Шарпофщина какая-то, это там к "вложенным типам" обращаются через точку, в плюсах привычнее с::m
BFE>>Это не обращение к вложенному типу. Это доступ к свойству типа.
Б> Ага )) https://onlinegdb.com/8pjntt4PN
Б>
Б>#include <stdio.h>

Б>struct SomeIdentifier {}; 

Б>constexpr int IsBool()
Б>{
Б>    struct SomeIdentifier1 { enum { entity = 5}; };
Б>    SomeIdentifier1 SomeIdentifier;
Б>    return SomeIdentifier.entity;
Б>}
Б>int main()
Б>{
Б>    return IsBool();
Б>}
Б>

Б>//просто Это не доля слабаков.
Действительно. Не все могут отличить тип от объекта. Вот пример здесь
Автор: B0FEE664
Дата: 05.12 21:17
, который (без всякой рефлексии) авторы компиляторов компилируют в меру своего прочтения стандарта. А ваш пример довольно простой и однозначный. К обсуждаемому вопросу имеет весьма опосредствованное отношение. Какое отношение правила поиска имени имеет к рефлексии? Их менять не потребуется.

BFE>>>>Далее, template for не нужен.

Б> )) вы пытаетесь играть в Чепаева там, где играют в шахматы.
Да ну? Зачем template, если и без него всё получилось? Переусложнение ради выпендрёжа.

Б> Я пропускаю этот код не относящийся к теме, сорри. Меня не смущает.

Извинения не принимаются.

BFE>>Приведите пример такой парадигмы.

Б> А я привел, смотрите выше, вам моих велосипедов еще подкинуть ?
И вы это называете парадигмой?

BFE>>Это не так. Нет такого конфликта. Приведите пример, если думаете иначе. Однако "Автор прав"

Б> конечно нет ))) вообще в грамматиках если че поменяешь конфликтов нет... ))!! браво!!!
Давайте. Покажите на примере.

Б>>>2. Сплайсинг [:e:] и метаобъекты

Б>>>Автор утверждает, что e.value достаточно. Но в текущем черновике рефлексии (P2996) e — это не сам объект, а «дескриптор» (handle) метаобъекта.
Б>>>Сплайсинг ([:e:]) — это мост из мира метаданных обратно в мир кода.
Б>>>Без явного сплайсинга компилятору было бы крайне сложно понять, когда вы хотите получить свойство метаобъекта, а когда — превратить метаобъект в реальное выражение (expression), которое можно использовать в коде.
BFE>>Если слева от точки стоит тип, то это обращение к метаобъекту, если слева от точки стоит имя переменной, то это обращение с свойству переменной. Что тут сложного?
Б> см на пример выше.
И?
Б> вы когда грамматически обоснуете, чи там переменная, или тип, или другой типа в скоупе ... напишите грамматику, и будет с вас. )) а мне уже влом отвечать.
То есть вы хотите сказать, что если в С++ справа от имени поставить точку, то имя автоматически становится именем объекта? Так? Ведь другого способа отличить имя объекта от имени типа нет?

Б> я видите ли контекстно зависимые синтаксические выражения нюхом чую.

То есть в шахматы вы тоже чисто на интуиции? Да?

Б>>>3. template for vs обычный for

Б>>>Здесь автор затронул фундаментальную проблему. Обычный for в C++ порождает цикл в рантайме. Чтобы превратить итерацию по метаданным в развернутый код (unrolling) или генерацию разных типов на каждой итерации, нужен специальный маркер.
Б>>>Если оставить обычный for, компилятору придется проводить сложнейший анализ, чтобы понять: «ага, это цикл по константам, я должен его развернуть».
Б>>>template for явно говорит: «это генерация кода». Это делает поведение предсказуемым.
BFE>>См. пример выше.
Б> см ответ про typename
Причём он тут?
И что с этим зависимым именем? Если явно указали typename, значит получили тип, значит можно type_.entities; В чём вопрос-то?

Б> это вас по голове погладили, сказав перед тем, что вы предлагаете сломать объектную модель.

В каком месте сломать? Вот что конкретно ломается?

BFE>>Что же касается "красивых оберток", то покажите мне красивую обёртку вокруг std::filesystem

Б> Вообще без проблем шо вам написать ? сколько тенге?
Не надо мне ничего писать, просто укажите на красивые обёртки вокруг std::filesystem или std::condition_variable. Ведь ИИ утверждают, что их пишут. Если это правда, то нет никакого труда указать на парочку красивых, уже написанных.

Б> ))) какбы так описать, ну не сделает комитет, я буду продолжать зарабатывать на велосипедах (и скрещу в солюшинах с ИИ), сделает ... будет еще интереснее скрещу стандарт с ИИ )) вам что написать?))). ой сколько у меня этих велосипедов, что упрощали мне жизнь, и создавали syntax barier, за которым жилось вполне комфортно в realisation time. у таких как я видите-ли, винвин.

Тогда зачем о сроках интересуетесь?
И каждый день — без права на ошибку...
Re[8]: так компайл тайм рефлекшину быть 26-й стандарт ??
От: ботаныч Интернет https://youtu.be/I3lhN5CUP2M
Дата: 27.03.26 20:16
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, ботаныч, Вы писали:


Б>> это не сишный вызов, этор метаметод в с++;

BFE>А почему он выглядит как вызов сишной функции?
так boost::bind тоже выглядит как "сишная".. но вы посмотрите на сигнатуру.

Б>>//просто Это не доля слабаков.

BFE>Действительно.
Ага, не слабак. ну скажите а как эта "штука" https://rsdn.org/Forum/?fuid=91523 работает.
Кстати там, тоже "сишный" вид hl::print_type<typename hl::export_to_list<cutlets>::type >(); ))

BFE>Не все могут отличить тип от объекта.

Да не все могут понять, что вести дискуссию про синтаксис когда под рукой нет грамматик. А комитетчики обсуждают там, куда больше 1-2-х, они ткскть ищуит золотую средину, чтобы минимизировать риски для раработчиков компиляторов всех стран )).

BFE>Вот пример здесь
Автор: B0FEE664
Дата: 05.12 21:17
,

пример вообще ниочем, и к теме отношения не имеет. Но спасибо за аргумент против себя ) прктически автогол.

BFE>который (без всякой рефлексии) авторы компиляторов компилируют в меру своего прочтения стандарта. А ваш пример довольно простой и однозначный. К обсуждаемому вопросу имеет весьма опосредствованное отношение. Какое отношение правила поиска имени имеет к рефлексии? Их менять не потребуется.

Не ну я вам более интересный пример привел, с template <auto... Dat> struct Meta;

BFE>>>>>Далее, template for не нужен.

Б>> )) вы пытаетесь играть в Чепаева там, где играют в шахматы.
BFE>Да ну? Зачем template, если и без него всё получилось? Переусложнение ради выпендрёжа.
Складывается ощущение, что вы читаете только себя. Я намекал на наличие typename в бустах нечто NESTED_TYPENAME есть почему? Комитет занимается поиском минимизированных (и слава Богу) решений.

Б>> Я пропускаю этот код не относящийся к теме, сорри. Меня не смущает.

BFE>Извинения не принимаются.
Извините, но мне побарабану.

BFE>>>Приведите пример такой парадигмы.

Б>> А я привел, смотрите выше, вам моих велосипедов еще подкинуть ?
BFE>И вы это называете парадигмой?
Вполне. Так как там работает механизм сборки типов в тайплист? Прочли? Поняли?

BFE>>>Это не так. Нет такого конфликта. Приведите пример, если думаете иначе. Однако "Автор прав"

Б>> конечно нет ))) вообще в грамматиках если че поменяешь конфликтов нет... ))!! браво!!!
BFE>Давайте. Покажите на примере.
Что показать на примере?
У вас есть точка после типа? В С++? — проиллюстрируйте. Вам прямо в комитет дорога,
Даже если каким-то чудом вы там окажетесь, знаю что вам ответят — хотите точку ? Хотите дальше )

Б>>>>2. Сплайсинг [:e:] и метаобъекты

Б>>>>Автор утверждает, что e.value достаточно. Но в текущем черновике рефлексии (P2996) e — это не сам объект, а «дескриптор» (handle) метаобъекта.
Б>>>>Сплайсинг ([:e:]) — это мост из мира метаданных обратно в мир кода.
Б>>>>Без явного сплайсинга компилятору было бы крайне сложно понять, когда вы хотите получить свойство метаобъекта, а когда — превратить метаобъект в реальное выражение (expression), которое можно использовать в коде.
BFE>>>Если слева от точки стоит тип, то это обращение к метаобъекту, если слева от точки стоит имя переменной, то это обращение с свойству переменной. Что тут сложного?
Б>> см на пример выше.
BFE>И?
А вы хоть имеете уровень в разрешали конфликтов в синтаксических анализаторах, грамматиках ?

Б>> вы когда грамматически обоснуете, чи там переменная, или тип, или другой типа в скоупе ... напишите грамматику, и будет с вас. )) а мне уже влом отвечать.

BFE>То есть вы хотите сказать, что если в С++ справа от имени поставить точку, то имя автоматически становится именем объекта? Так? Ведь другого способа отличить имя объекта от имени типа нет?
Я там спросоня, после довольно жесткой дискуссии с rg45 пытался привести контекстнозависимые выражения, .. но сорри пошел спать) поздно было и весел я не был. А вообще зачем точка после типа, если сейчас уже там есть ::? Зачем? По-выпендриваться?

BFE>То есть в шахматы вы тоже чисто на интуиции? Да?

Ну скажем, я не силен, так чтобы совсем .. но обыграв коллегу, которого мастер спорта тренировал, услышал в свой адрес — игра со слабой дебютной подготовкой. Да я слабо знаю дебюты, впрочем как и нотную грамоту, но сыграю .. ушки заверутся
)

Б>> см ответ про typename

BFE>Причём он тут?
А притом, что на наличие его можно тоже по-возмущаться )) Зачем он там, если и так понятно, что там должен быть тип. Но ) это компиляторостроение, а не танцы для девочек.
BFE>И что с этим зависимым именем? Если явно указали typename, значит получили тип, значит можно type_.entities; В чём вопрос-то?
Вы хотите точку ? Хотите дальше, больше скажу, я не могу ответить себе на вопрос зачем?

BFE>В каком месте сломать? Вот что конкретно ломается?

Да что там, велкам в комитет, вас внимательно прослушают, думаю совсем недолго. Хотите точку справа от типа? — Хотите дальше.

BFE>Не надо мне ничего писать, просто укажите на красивые обёртки вокруг std::filesystem или std::condition_variable. Ведь ИИ утверждают, что их пишут. Если это правда, то нет никакого труда указать на парочку красивых, уже написанных.

Меня устраивает std::filesystem чем он не устраивает вас? это 1. а 2. Вы переходите от языка к фреймворкам, реализуйте свой.

BFE>Тогда зачем о сроках интересуетесь?

А вот когда состоится, поговорим ) уже с обертками.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.