
Диджитал
29.09.2017
15:27:58
я про статический ассерт и говорил

Constantine
29.09.2017
15:28:16
статический ассерт в данном случае невозможен в принципе, я не могу проверить тело функции

Диджитал
29.09.2017
15:28:25
и нет, я не подразумевал. что это можно сделать существующими средствами, возможно, просто их расширить

Constantine
29.09.2017
15:29:08
внедрение интроспекции уровня чтения кода действительно решит эту проблему, но является невозможной задачей

Google

Диджитал
29.09.2017
15:31:03
если потребовать определения тела в хедере - то почему невозможной?

Constantine
29.09.2017
15:32:38
потому что тело функции иногда оптимизируют
функции после компиляции может вообще не существовать
забавно, пример действительно есть в реализации std::function в MSC
virtual const _XSTD2 type_info& _Target_type() const _NOEXCEPT = 0;
http://en.cppreference.com/w/cpp/utility/functional/function/target_type

Диджитал
29.09.2017
15:35:05
так это здесь неважно, важно, чтобы функция имела вид return constexpr

Constantine
29.09.2017
15:35:21
и как это проверить через static_assert?

Диджитал
29.09.2017
15:35:32
ввести новый тип ассерта

Constantine
29.09.2017
15:35:46
и что он должен сделать? вызвать функцию, которая не помечена constexpr?

Диджитал
29.09.2017
15:35:58
я к тому, что такое изменение гораздо локальнее, чем лезть в vtbl

Constantine
29.09.2017
15:36:18
пока функция не помечена constexpr она не может быть constexpr выражением

Диджитал
29.09.2017
15:36:44
пусть компилятор убедится, что она constexpr, и вызовет

Constantine
29.09.2017
15:36:49
виртуальная функция не может быть constexpr по действующему стандарту

Google

Диджитал
29.09.2017
15:37:16
и нет, я не подразумевал. что это можно сделать существующими средствами, возможно, просто их расширить
просто исходя из твоей проблемы, расширять нужно механизмы проверки, а не механизмы вызова

Constantine
29.09.2017
15:37:56
модификация стандарта "компилятор должен проверить, что функция constexpr" глобальнее запрета использования this по декларации

Aidar
29.09.2017
15:38:05
Я правда не совсем вижу профит

Constantine
29.09.2017
15:38:48
Я хочу избежать синтаксиса "virtual static", поскольку взятие адреса такой функции не должно давать статическую функцию

Aidar
29.09.2017
15:38:52
Какое-то ооп

Диджитал
29.09.2017
15:39:36

Aidar
29.09.2017
15:39:36

Constantine
29.09.2017
15:39:49

Aidar
29.09.2017
15:40:23
const?

Constantine
29.09.2017
15:40:25
У тебя под std::function лежит интерфейс

Aidar
29.09.2017
15:41:00
Так а Профит то какой?

Constantine
29.09.2017
15:41:05
Может ли значение target_type измениться вообще когда-нибудь при каких-нибудь обстоятельствах при вызове неконстантной функции этого интерфейса?
Профит в том, что ты пишешь более сильный контракт метода

Aidar
29.09.2017
15:41:28
Сделай константный

Constantine
29.09.2017
15:41:49
Константными все методы интерфейса?

Aidar
29.09.2017
15:41:51

Google

Aidar
29.09.2017
15:42:18
Ну в твоём случае не трогать this

Constantine
29.09.2017
15:42:58
target_type это не просто константа, target_type это constexpr

Aidar
29.09.2017
15:43:40

Constantine
29.09.2017
15:43:54
Ну ты просто выбрасываешь эту часть контракта

Aidar
29.09.2017
15:43:54
Да и если завезли то в чем проблема?
Читать нельзя?

Constantine
29.09.2017
15:44:21
А потом тебе короче вписывают под твой контракт реализацию, в которой при перемещении на новый адрес target_type пропадает
И это полностью удовлетворяет твой контракт, написанный на языке
Ну, кроме комментария

Aidar
29.09.2017
15:45:33
А у тебя ваще есть гарантия что например виртуальная таблица валидна там?

Constantine
29.09.2017
15:47:01
Интересный вопрос, полагаю, что да, есть

Aidar
29.09.2017
15:47:37
this невалиден а виртуальная таблица валидна?

Constantine
29.09.2017
15:49:30
this не бывает невалиден
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
Так что таблица виртуальных функций валидна
Она безусловно инициализируется, а не копируется
Кажется, это ровно вопрос типа "что будет при копировании со срезкой"

Aidar
29.09.2017
15:54:32

Google

Constantine
29.09.2017
15:55:21
static является гарантией повторяемости независимо от вызовов методов

Aidar
29.09.2017
15:56:23
Ну ты хочешь короче новую семантику с тем же поведением
Странно все это
Слишком математично

Admin
ERROR: S client not available

Constantine
29.09.2017
15:57:02
Я хочу, чтобы можно было перенести требование статического полиморфизма "задана статическая/constexpr функция" в динамический полиморфизм

Aidar
29.09.2017
15:57:55

Constantine
29.09.2017
15:57:56
Например, представь, у меня есть интерфейс IntegerType

Aidar
29.09.2017
15:58:24
Тогда вызывать нечего

Berkus
29.09.2017
15:58:25

Constantine
29.09.2017
15:58:39

Berkus
29.09.2017
15:59:21
язык

Constantine
29.09.2017
16:02:01
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); };
};
вот как я должен в данном случае описать std::numeric_limit?

Berkus
29.09.2017
16:06:44
ах соо

Александр
29.09.2017
16:14:32

Constantine
29.09.2017
16:15:22

Александр
29.09.2017
16:17:14

Google

Constantine
29.09.2017
16:18:26
на самом деле я должен грубо говоря объявить интерфейс, потом объявить шаблонную реализацию с параметром Traits, которая закроет через final методы с реализацией из Traits
и не дай ?-? у меня что-то там будет наследоваться
собственно внутренний интерфейс std::function
virtual _Myt *_Copy(void *) const = 0;
virtual const _XSTD2 type_info& _Target_type() const _NOEXCEPT = 0;

Aidar
29.09.2017
16:21:07
Вобщем ты хочешь стратегии в компильтайм без наследования?

Constantine
29.09.2017
16:21:32
Я хочу атрибуты фактических классов в рантайм без мапы с RTTI

Aidar
29.09.2017
16:21:35
Тоесть чтоб в контейнер упихать

Constantine
29.09.2017
16:23:45
В компильтайм все хорошо
Шаблончик специализирую и все
Ладно, вроде замечаний по существу не было, напишу потом. Есть более безумная вещь.
2. В конце выполнения auto return type deduction вместо ошибки в случае различия аргументов инстанцировать std::lang::common_type, специализация которого разрешена (с дополнительными условиями во избежание циклической зависимости)

Антон
29.09.2017
16:52:23
слушайте, а можно линковаться с вайновскими либами?
чтобы вызывать вайновские методы в голом лянехсе

Berkus
29.09.2017
16:54:15
можно, только без запущенного рантайма толку от этого никакого

Антон
29.09.2017
16:54:40
не, мне вызывать методы

fox.cpp
29.09.2017
16:55:22
ну ведь развалится без рантайма

Антон
29.09.2017
16:55:48

fox.cpp
29.09.2017
16:56:05
какое-то извращение, давай рассказывай, зачем тебе оно надо