
Constantine
25.09.2018
23:32:00
да, это верно
cheched exception, являющиеся возвращаемым значением функции
с типом "checked exception", который может быть параметром функции

PRoSToC0der
25.09.2018
23:36:08
сложности кстати будут в шаблонных функциях

Google

Constantine
25.09.2018
23:36:18
там все идеально
у меня есть реализация

PRoSToC0der
25.09.2018
23:36:27
допустим мы хотим всё перебросить
и нужно как-то получить всё что мы перебрасываем
придётся немного дублировать код

Constantine
25.09.2018
23:37:01
ну если компилер научить выводить (а он может), все ок

PRoSToC0der
25.09.2018
23:37:02

Constantine
25.09.2018
23:37:47
using load_data_exceptions = type_base_set<...>
using decode_exceptions = type_base_set<...>
using load_string_exceptions = type_base_or<load_data_exceptions, decode_exceptions>
result<std::string, load_string_exceptions> load_string

PRoSToC0der
25.09.2018
23:38:32

Constantine
25.09.2018
23:38:42
в совершенном шаблоне можно выводить через declval всегда
но это типичная проблема слишком шаблонного кода

Google

PRoSToC0der
25.09.2018
23:40:02
ну допустим у нас в шаблонной функции принимаются 3 функтора и мы их все где-нибудь да вызываем в функции и получается нам нужно будет повторить все исключения этих функций в result type
exceptions_of_t<decltype(f1(args...)), decltype(f2(args2...)), decltype(f3(args3...))>
что-то в таком духе
можно в язык ввести фичу с помощью которой можно было бы создавать правила для вывода типа в случае возврата функцией разных типов
-> exception_combine_t<ReturnTypes...>
auto parse(std::string s) -> variant_combine_t<ReturnTypes...> {
if (...) {
return float{/*...*/};
} else if (...) {
return int{/*...*/};
} else {
return s;
}
}
соответственно возвращаемый тип будет std::variant<float, int, std::string>
правда нужен какой-то адекватный синтаксис

Constantine
25.09.2018
23:49:35

PRoSToC0der
25.09.2018
23:50:01
там можно auto
хммм, а это неплохая идея, если ты конечно про exceptions_of_t<auto>

Constantine
25.09.2018
23:51:02
или даже typedef throws(auto) exception_type
к сожалению, С++ не имеют воздействия на type deduction в auto
грубо говоря, auto в return не инстанцирует условный auto_common_type

PRoSToC0der
25.09.2018
23:52:37

Constantine
25.09.2018
23:53:07

PRoSToC0der
25.09.2018
23:53:29

Constantine
25.09.2018
23:53:37
using result_type = variant<какой-т>

PRoSToC0der
25.09.2018
23:54:03

Constantine
25.09.2018
23:54:10
если речь про спецсинтаксис то я за
void parse(std::string s) throws(auto)

PRoSToC0der
25.09.2018
23:54:27

Google

Constantine
25.09.2018
23:55:05
например, непонятно, как работать с рекурсией

Roman
25.09.2018
23:55:19
Чот на мой вопрос про RTTI для виртуального наследования в clang maillist за неделю никто не ответил :(
Попробуем stackoverflow https://stackoverflow.com/questions/52508052/rtti-for-virtual-inheritance-without-virtual-functions

Constantine
25.09.2018
23:56:16
видимо, в variant<auto> надо будет объяснять это variant<auto> кастомной выводилке
хотя если считать, что это монолитный оператор и поиск ведется именно variant<auto> мб сработает

PRoSToC0der
25.09.2018
23:57:02

Constantine
25.09.2018
23:57:37

PRoSToC0der
25.09.2018
23:58:11
в случае с parse это float, int, std::string

Constantine
25.09.2018
23:59:11
вообще интересно если возвращаемое значение будет user_auto_deductor_t<variant<typename...»
что делать с рекурсией интересно
user_auto_deductor_unknown?

PRoSToC0der
25.09.2018
23:59:35

Constantine
26.09.2018
00:01:13

PRoSToC0der
26.09.2018
00:02:29

Constantine
26.09.2018
00:03:38
хотя очень хочется иметь ветки nullopt
а вот typedef throws(checked_exceptions) some_type мы наверное решим

Google

Constantine
26.09.2018
00:05:19
в синтаксисе саттера причем, считаем что
throws(true) это throws (true -> any_type)

PRoSToC0der
26.09.2018
00:05:47

Constantine
26.09.2018
00:06:12
auto fib(int x) {
if (x <= 1) return 1;
return fib(x - 1) + fib(x - 2);
}
текущие правила говорят ОК, потому что return 1 дает int и int+int это int

PRoSToC0der
26.09.2018
00:07:46
с этим понятно, но хочется пример под std::variant<auto> или какой-нибудь common_type_t<auto>

Constantine
26.09.2018
00:08:17
ну там рекурсия это непонятный тип, он же self dependent

PRoSToC0der
26.09.2018
00:08:20
хотя с common_type можно тот же фибоначчи переделать

Constantine
26.09.2018
00:08:23
будет парадокс
common_type_t<auto> не будет работать, да
он должен получить unspecified_auto в качестве аргумента

PRoSToC0der
26.09.2018
00:10:06
std::common_type_t<auto> fib(int x) {
if (x <= 0) return int{1};
if (x == 1) return long{1};
return fib(x - 1) + fib(x - 2);
}
сложновато придумать какую-то эвристику когда это должно работать, а когда должно выдавать ошибку, чтобы не уходить в бесконечную рекурсию

Roman
26.09.2018
00:12:51
Вопрос:
int * p = new int[0];
UB или нет ?
По факту наблюдаю что оно аллоцирует один байт
Это стандартно, или implementation-specific?
Если стандартно, то зачем. Не лучше ли вернуть nullptr ?

Evgeniy
26.09.2018
00:17:38
https://stackoverflow.com/questions/1087042/c-new-int0-will-it-allocate-memory

Alexander
26.09.2018
00:18:51

Roman
26.09.2018
00:19:17
Ты на CppCon сидишь?

Google

Alexander
26.09.2018
00:19:27
Да

Roman
26.09.2018
00:19:31
Крутооо ??

PRoSToC0der
26.09.2018
00:20:20
можно уже облизываться?

Roman
26.09.2018
00:22:00

PRoSToC0der
26.09.2018
00:22:21

Roman
26.09.2018
00:22:40

PRoSToC0der
26.09.2018
00:22:43
будут ли одинаковые адреса например

Roman
26.09.2018
00:23:01
Под linux адреса разные
т.е. зарезервированного адреса под нулевые аллокации у него нет

PRoSToC0der
26.09.2018
00:23:37
пример кода сфоткаешь?)

Roman
26.09.2018
00:24:07
более того, если перегрузить operator new, то он просит именно байт. Так что возможно по другому сделать нельзя

Alexander
26.09.2018
00:24:49

PRoSToC0der
26.09.2018
00:24:50
или там не про скомбинированный пропозал?

Alexander
26.09.2018
00:25:09
А просто с примерами модулей лучше просто играться

Roman
26.09.2018
00:25:11
https://gcc.gnu.org/svn/gcc/branches/c++-modules/

Alexander
26.09.2018
00:25:27

PRoSToC0der
26.09.2018
00:25:50
или он ещё не готов?

Alexander
26.09.2018
00:33:58