
Владислав
16.06.2017
14:25:50
scope exit у тебя выполнится перед выходом из скоупа в котором указан

Igor
16.06.2017
14:25:59
exit_code = [](){ if (path1) {return 1;} if (path2) {return 2;} }();

Constantine
16.06.2017
14:26:25

Arseny
16.06.2017
14:27:03
Почему нельзя сделать функцию, всегда возвращает int и использовать ее внутри исходной?

Google

Igor
16.06.2017
14:27:06
ну э, либо две функции, либо лямбда, либо много раз =; return
либо если совсем хочется наркомании и сломать мозги читателю, тернарный оператор и запятые

Arseny
16.06.2017
14:30:47
Две функции вроде логичный способ. Что в нем читерского?

Igor
16.06.2017
14:31:53
нежелание засорять неймспейс одноразовыми функциями, я так понимаю

Владислав
16.06.2017
14:32:28
мб добавить статический флаг и от него плясать?

Pepe
16.06.2017
14:33:32
Только для очень больших чисел применяется. И я хочу для гпу написать но пока не понял как gmp увязать с этим

Arseny
16.06.2017
14:34:39

Владислав
16.06.2017
14:35:29
ну по сути то же самое
только определено будет в другом месте

Anatoly
16.06.2017
14:36:31
если речь о том, чтобы обязать выполнять нечно перед return, то почему не изменить протокол с приватными функциями и обязать вместо int возвращать ResultCodeSetter
?

Constantine
16.06.2017
14:39:20
а если мне нужен не MoveConstructible параметр из scope, мне вложение строить каждый раз?

Google

Александр
16.06.2017
14:40:23
каждый выход из функции ОБЯЗАН указать значение
можно сделать возвращаемое значение типа struct Foo, лямбду
auto ret = [&](auto res) { err_code = res; return Foo{}; };
и тогда вернуться из функции можно будет только через return ret(-1);

Constantine
16.06.2017
14:43:55
так-то понятно, что я могу написать auto вместо void и сказать
auto end_function = [&](int return_code) -> std::integral_constant<int, __LINE__> { /*use everything I want*/ return {}; };

Александр
16.06.2017
14:45:15
ну вот

Дед Пегас
16.06.2017
14:46:41
Чо нашёл! https://github.com/stlab/libraries

Constantine
16.06.2017
14:47:08
ну вот
а если у меня функция должна не void вернуть, а осмысленное значение?

Александр
16.06.2017
14:47:49

Constantine
16.06.2017
14:48:10
да, только теперь у меня нет возможности блокировать явный возврат

Igor
16.06.2017
14:48:54

Constantine
16.06.2017
14:49:14
std::tuple?
std::tuple<auto, int> в каком стандарте компильнется?

Sergey
16.06.2017
14:49:44
это как вообще, лол

Constantine
16.06.2017
14:50:36
я о том же

Igor
16.06.2017
14:51:13
чёт ум за разум заходит уже, зачем auto, вроде ж речь шла про то чтобы переписать ?, не?
void SomeFunction() {
if (path1) { exit_code = 1; return; }
if (path2) { exit_code = 2; return; }
if (path3) { exit_code = 3; return; }
}

Constantine
16.06.2017
14:51:42
текущий чит
auto SomePublicFunction();
//impl
auto end_function = [&](int return_code) -> std::integral_constant<int, __LINE__> { /*use everything I want*/ return {}; };
if (path1) return end_function(1);

Igor
16.06.2017
14:51:42
только для функции с типом вместо void

Constantine
16.06.2017
14:53:12
и аналогичный чит не сработает, если возврат был не void

Владислав
16.06.2017
14:55:26
шото я совсем перестал понимать

Constantine
16.06.2017
14:57:52
что тут непонятного? мне нужен SCOPE_EXIT, требующий параметр при EXIT
деструктор с параметром меня бы устроил :) (нет)

Igor
16.06.2017
15:00:16
а параметр будет определён в процессе выполнения функции?

Google

Aidar
16.06.2017
15:00:37

Constantine
16.06.2017
15:01:41

Arseny
16.06.2017
15:02:56

Constantine
16.06.2017
15:03:23

Igor
16.06.2017
15:03:34
локально для функции определить класс с деструктором и параметром, создать объект, начать выполнять ветки, дойти до конца, проинициализировать параметр в объекте и вернуть что нужно?

Arseny
16.06.2017
15:04:01

Constantine
16.06.2017
15:04:08
void func(){
SomeNotMCType object;
return_code = [&]() -> int {
}();
return_code = object.remap(return_code);
}

Igor
16.06.2017
15:04:09
или в деструкторе тоже нужно завязываться на происходящее в ветках?

Constantine
16.06.2017
15:04:14
ну это немного изврат

Aidar
16.06.2017
15:06:17
выносмозга-ориентированное программирование

Constantine
16.06.2017
15:06:43
вот что-то такое
почему блин плюсам нельзя предоставить формальное доказательство, что данный std::unique_ptr в данной точке будет nullptr и чтобы в этом случае плюсы не синтезировали вызов десктрутора? :(

Vladislav
16.06.2017
15:15:23

Дед Пегас
16.06.2017
15:15:34
+

Constantine
16.06.2017
15:15:42

Aldar
16.06.2017
15:16:12

Constantine
16.06.2017
15:17:53
О! Да это же то, о чем я всю жизнь мечтал

Vladislav
16.06.2017
15:18:00

Aldar
16.06.2017
15:18:14
https://t.me/haskellru
как раз тут idris обсуждают с зависимыми типами

Google

Constantine
16.06.2017
15:20:18
я не хочу программировать на хаскеле, я хочу определить
struct unique_ptr {
constexpr bool magic_word not_null() const { return inner != nullptr; }
constexpr bool magic_word surely_null() const { return inner == nullptr; }
surely_null unique_ptr(nullptr_t) { inner = nullptr; }
~unique_ptr() { delete inner; }
~unique_ptr() surely_null { }
};
и потом писать
not_null unique_ptr ptr = make_unique();
такое можно подмутить на шаблончиках, но слегка упорешься
хуже того, есть проблема, что я не могу изменить тип переменной внутри метода

Anatoly
16.06.2017
15:29:30
как вообще оно у тебя в блоке nullptr стало?
а... всё ок
не знаю, как у тебя, а у меня
/// Destructor, invokes the deleter if the stored pointer is not null.
~unique_ptr() noexcept
{
auto& __ptr = std::get<0>(_M_t);
if (__ptr != nullptr)
get_deleter()(__ptr);
__ptr = pointer();
}

Constantine
16.06.2017
15:33:49
я примерчик пишу
и я хочу, чтобы
{
unique_ptr ptr = nullptr;
} //deleter не вызван и не инстанцирован

Anatoly
16.06.2017
15:35:12
а где он вызывается?

Constantine
16.06.2017
15:35:43
вот так даже

Admin
ERROR: S client not available

Constantine
16.06.2017
15:36:25
потому что ежу понятно, что в этом месте указатель будет на nullptr

Anatoly
16.06.2017
15:37:00
зачем ты пишешь deleter-ы, которые нельзя инстанцировать?)

Anatoly
16.06.2017
15:37:05
это информация рантайма
в любой момент я могу написать ptr.reset(new T);

Constantine
16.06.2017
15:37:49
это информация рантайма
В языке C++ есть cv-qualifier. Если дописать в язык C++ еще один такой же user-defined qualifier, ничего не сломается

Anatoly
16.06.2017
15:38:39
но пу сути это уже совсем другой интерфейс должен быть, а не то что предоставляет unique_ptr
напиши null_unique_ptr который не будет требовать deletor

Constantine
16.06.2017
15:39:35

Anatoly
16.06.2017
15:40:13
ты плюсы путаешь с другим языком, в котором можно модифицировать типы переменных

Google

Constantine
16.06.2017
15:41:00
я ничего не путаю, нет ни одной причины, по которой компилятор не может вычислять аналог user-defined cv-qualifier на этапе компиляции с модификацией фактического типа переменной

Anatoly
16.06.2017
15:42:02
но ему по сути надо проследить дальшейшие цепочки, в которых используется этот объект, чтобы убедится в том, что нелегальных вызовов нет, в которых потребуется деструктор

Constantine
16.06.2017
15:42:36
ему нужно будет вычислить фактический qualifier на момент вызова деструктора
после чего выполнить вызов функции точно так же, как производится выбор функции при наличии cv

Дед Пегас
16.06.2017
15:44:35
Просто вам нужен Haskell

Constantine
16.06.2017
15:44:49
мне не нужен хаскель

Anatoly
16.06.2017
15:45:00
хаскель ему не поможет

Constantine
16.06.2017
15:45:05
я думаю, что существуют причины, по которым есть примерно 0 серьезных проектов на хаскеле

Anatoly
16.06.2017
15:45:24
какая ложь...

Дед Пегас
16.06.2017
15:45:43

Constantine
16.06.2017
15:46:21

Anatoly
16.06.2017
15:46:42
опенсорс?

Constantine
16.06.2017
15:48:31
хочу увидеть проект на больше 10М кода на хаскеле

Anatoly
16.06.2017
15:48:36
folly только студией собирается? Кто-нибудь пробовал msys2 ?
на х-ле не нужно столько кода писать, бро
суть правильных языков

Friedrich
16.06.2017
15:49:17
Друзья, преимущества хаскеля вы можете обсудить в хаскелечате.

Constantine
16.06.2017
15:49:30
тогда можно доказательство, что код на хаскелле занимает в объеме в 100 раз меньше, чем аналогичный на плюсах

reagentoo
16.06.2017
15:50:08

Constantine
16.06.2017
15:50:12
и тогда 1М кода на хаскеле

Роман
16.06.2017
15:50:18

Friedrich
16.06.2017
15:50:36