@ProCxx

Страница 1338 из 2477
Диджитал
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
Какое-то ооп

Constantine
29.09.2017
15:39:49
кстати, почему не должно?
потому что это НЕ статическая функция

А Профит не трогать this какой?
Смотри. Ты реализуешь target_type для std::function

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 измениться вообще когда-нибудь при каких-нибудь обстоятельствах при вызове неконстантной функции этого интерфейса?

Профит в том, что ты пишешь более сильный контракт метода

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
target_type это не просто константа, target_type это constexpr
У тебя виртуальность констекспр допустим ещё не завезли

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
this не бывает невалиден
Тогда я не понял зачем тебе не const virtual а новая штука

Google
Constantine
29.09.2017
15:55:21
Тогда я не понял зачем тебе не const virtual а новая штука
Потому что const это другая гарантия. Грубо говоря const гарантирует повторяемость вплоть до не-const вызова

static является гарантией повторяемости независимо от вызовов методов

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

Странно все это

Слишком математично

Admin
ERROR: S client not available

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

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

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

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
ах соо

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
какое-то извращение, давай рассказывай, зачем тебе оно надо

Страница 1338 из 2477