Диджитал
я к тому, что такое изменение гораздо локальнее, чем лезть в vtbl
Constantine
пока функция не помечена constexpr она не может быть constexpr выражением
Диджитал
пусть компилятор убедится, что она constexpr, и вызовет
Constantine
виртуальная функция не может быть constexpr по действующему стандарту
Диджитал
и нет, я не подразумевал. что это можно сделать существующими средствами, возможно, просто их расширить
Диджитал
просто исходя из твоей проблемы, расширять нужно механизмы проверки, а не механизмы вызова
Constantine
модификация стандарта "компилятор должен проверить, что функция constexpr" глобальнее запрета использования this по декларации
Aidar
Aidar
Я правда не совсем вижу профит
Constantine
Я хочу избежать синтаксиса "virtual static", поскольку взятие адреса такой функции не должно давать статическую функцию
Aidar
Какое-то ооп
Диджитал
Aidar
Aidar
const?
Constantine
У тебя под std::function лежит интерфейс
Aidar
Так а Профит то какой?
Constantine
Может ли значение target_type измениться вообще когда-нибудь при каких-нибудь обстоятельствах при вызове неконстантной функции этого интерфейса?
Constantine
Профит в том, что ты пишешь более сильный контракт метода
Aidar
Aidar
Сделай константный
Constantine
Константными все методы интерфейса?
Aidar
Aidar
Aidar
Ну в твоём случае не трогать this
Constantine
target_type это не просто константа, target_type это constexpr
Aidar
Constantine
Ну ты просто выбрасываешь эту часть контракта
Aidar
Да и если завезли то в чем проблема?
Aidar
Читать нельзя?
Constantine
А потом тебе короче вписывают под твой контракт реализацию, в которой при перемещении на новый адрес target_type пропадает
Constantine
И это полностью удовлетворяет твой контракт, написанный на языке
Constantine
Ну, кроме комментария
Aidar
Aidar
А у тебя ваще есть гарантия что например виртуальная таблица валидна там?
Constantine
Интересный вопрос, полагаю, что да, есть
Aidar
this невалиден а виртуальная таблица валидна?
Constantine
this не бывает невалиден
Constantine
For non-union class types (class and struct), the move constructor performs full member-wise move of the object's bases and non-static members, in their initialization order, using direct initialization with an xvalue argument
Constantine
Так что таблица виртуальных функций валидна
Constantine
Она безусловно инициализируется, а не копируется
Constantine
Кажется, это ровно вопрос типа "что будет при копировании со срезкой"
Constantine
static является гарантией повторяемости независимо от вызовов методов
Aidar
Ну ты хочешь короче новую семантику с тем же поведением
Aidar
Странно все это
Aidar
Слишком математично
Constantine
Я хочу, чтобы можно было перенести требование статического полиморфизма "задана статическая/constexpr функция" в динамический полиморфизм
Aidar
Constantine
Например, представь, у меня есть интерфейс IntegerType
Aidar
Тогда вызывать нечего
Berkus
Constantine
Berkus
язык
Constantine
struct IntegerInterface abstract {
virtual std::string to_chars() const = 0;
virtual intmax_t limit_max() const = 0; //декларация равносильна to_chars ??????
virtual void assign_integral(intmax_t) = 0;
};
template <typename T> struct IntegralInteger : IntegerInterface {
T inner;
virtual std::string to_chars() const { return std::to_chars(inner); };
};
Constantine
вот как я должен в данном случае описать std::numeric_limit?
Berkus
ах соо
Александр
Constantine
Constantine
на самом деле я должен грубо говоря объявить интерфейс, потом объявить шаблонную реализацию с параметром Traits, которая закроет через final методы с реализацией из Traits
Constantine
и не дай ?-? у меня что-то там будет наследоваться
Constantine
собственно внутренний интерфейс std::function
virtual _Myt *_Copy(void *) const = 0;
virtual const _XSTD2 type_info& _Target_type() const _NOEXCEPT = 0;
Aidar
Вобщем ты хочешь стратегии в компильтайм без наследования?
Constantine
Я хочу атрибуты фактических классов в рантайм без мапы с RTTI
Aidar
Тоесть чтоб в контейнер упихать
Constantine
В компильтайм все хорошо
Constantine
Шаблончик специализирую и все
Constantine
Ладно, вроде замечаний по существу не было, напишу потом. Есть более безумная вещь.
2. В конце выполнения auto return type deduction вместо ошибки в случае различия аргументов инстанцировать std::lang::common_type, специализация которого разрешена (с дополнительными условиями во избежание циклической зависимости)
usernameak
слушайте, а можно линковаться с вайновскими либами?
usernameak
чтобы вызывать вайновские методы в голом лянехсе
Berkus
можно, только без запущенного рантайма толку от этого никакого
usernameak
не, мне вызывать методы
Anonymous
ну ведь развалится без рантайма
Anonymous
какое-то извращение, давай рассказывай, зачем тебе оно надо
usernameak
d3dcompiler_43.dll