
reagentoo
16.06.2017
13:05:29
struct SizeofThisStructEqZero
{
private:
char c[0];
};
мнение

Alexander
16.06.2017
13:05:49
sizeof == 0
hahah

Google

Дед Пегас
16.06.2017
13:06:02

Aidar
16.06.2017
13:06:05
ктото говорилчто это уб
ну и оно не 0 байт же

reagentoo
16.06.2017
13:06:22

Aidar
16.06.2017
13:06:32
потомучто в массиве 0 жлементов
а ты потом собрался обращаться

reagentoo
16.06.2017
13:06:55
массив не используется. в привате он
поправил

Alexander
16.06.2017
13:08:45

reagentoo
16.06.2017
13:09:18
sizeof'ом же

Aidar
16.06.2017
13:09:23
полагаю баг гдето
или в стандарте или в компиляторах

Google

Aidar
16.06.2017
13:09:59
хотя наверн оно просто неопределено

Igor
16.06.2017
13:10:00
sizeof == 0
что за чёрт, разве не гарантируется что минимальный размер любого объекта == 1, иначе поломаются массивы?

Aidar
16.06.2017
13:10:40
ну вот
пойду поламаю массивы

reagentoo
16.06.2017
13:11:31
нраица?

Alexander
16.06.2017
13:12:34
нраица?
а мне не нраица, что там массив нулевого размера

Antony
16.06.2017
13:12:51
это расширение GCC

Alexander
16.06.2017
13:12:59
и Стандарту не нравится

Aidar
16.06.2017
13:13:00

Alexander
16.06.2017
13:13:23
If the constant-expression (5.19) is present, it shall be an integral constant expression and its value shall be greater than zero.

Igor
16.06.2017
13:13:24
warning: ISO C++ forbids zero-size array 'c' [-Wpedantic]

Aidar
16.06.2017
13:13:26

Alexander
16.06.2017
13:13:33
ISO/IEC 14882:2003 8.3.4/1:
If the constant-expression (5.19) is present, it shall be an integral constant expression and its value shall be greater than zero.
ISO/IEC 14882:2003 5.3.4/6:
The expression in a direct-new-declarator shall have integral or enumeration type (3.9.1) with a non-negative value.
/thread

Igor
16.06.2017
13:14:41
таки да, если убрать массив то sizeof == 1

Aidar
16.06.2017
13:15:28
массивы поломались да
а что это дает?
опасно чем?

Google

Igor
16.06.2017
13:17:19
указателем проитерироваться по всем элементам массива не получится, он будет заканчиваться там же где начался

Aidar
16.06.2017
13:18:13
там кстати видно что памяти выделяется 1 байт
а логика указателей и sizeof как с 0 байт
тоесть на 10 элементов массивы выделился 1 байт

reagentoo
16.06.2017
13:20:15
улучшенная версия nonesuch https://wandbox.org/permlink/SNrH5HbwpG7t8gws
?

Igor
16.06.2017
13:20:41

Sergey
16.06.2017
13:21:00
sizeof(YourMom) == 1.#INF0000

Aidar
16.06.2017
13:21:02
да sizeof дает 0 да
посмотри в асемблер
.

Igor
16.06.2017
13:21:47
...

Aidar
16.06.2017
13:21:56
в первую строку

Igor
16.06.2017
13:22:06
да-да

Aidar
16.06.2017
13:22:16
вот тот же код без массива

Дед Пегас
16.06.2017
13:22:37
Больше смахивает на хак.

Aidar
16.06.2017
13:22:50
да потомучто адесовать можно только байт

reagentoo
16.06.2017
13:24:37
https://wandbox.org/permlink/KxolswSjyO9BoIi6
как заткнуть clang чтобы варнингом не квохал? gcc более сдержанный

Google

reagentoo
16.06.2017
13:26:37
ясно
https://wandbox.org/permlink/rzWAFs62SmNRahIy

Berkus
16.06.2017
13:39:10
тебе ж написано прямо в сообщении, как
prog.cc:11:8: warning: private field 'c' is not used [-Wunused-private-field]

Дед Пегас
16.06.2017
14:02:55
Чо нашёл http://quick-bench.com/
Может быть немного полезно.
ИМХО

Admin
ERROR: S client not available

Constantine
16.06.2017
14:08:17
Я хочу, чтобы функция обязательно выполнила перед выходом некоторое действие, зависящее от параметров, и явно указать эти параметры
Поскольку функция возвращает void, я придумал, что можно написать ее возврат auto и дальше вернуть фактический результат из лямбды
Тогда если хотя бы один раз возврат был через лямбду на выходе, все остальные тоже обязаны быть такими же
как это делается?

Arseny
16.06.2017
14:13:33
А функция что в итоге должна возвращать?

Constantine
16.06.2017
14:15:29
У меня она void возвращала, я за счет этого выкрутился

Evgeniy
16.06.2017
14:16:22

Constantine
16.06.2017
14:16:25
На самом деле, в примере функция обязана на выходе инициализировать статическое поле

Arseny
16.06.2017
14:16:50
ScopeExit не подходит?

Constantine
16.06.2017
14:17:22
Параметр указывать обязательно

Владислав
16.06.2017
14:17:25
а, ну я же накидывал boost scope exit

Google

Владислав
16.06.2017
14:17:48
я подумал тебе не подходит, как то ты сложно описываешь тз
может легче написать псевдокод того, что ты хочешь и скинуть?

Arseny
16.06.2017
14:19:16
А в него лямбду не передать?

Constantine
16.06.2017
14:19:22

Arseny
16.06.2017
14:20:07
Ну и чем ScopeExit вроде того, что в folly не подходит?
Про бустовский я просто ничего не знаю

Igor
16.06.2017
14:20:25
return_code = SomePublicFunction() может Private?

Anatoly
16.06.2017
14:20:30
да хоть наколенный
может static void SomePublicFunction(){ ?

Constantine
16.06.2017
14:20:57

Anatoly
16.06.2017
14:21:01
собсно, как и приватная

Владислав
16.06.2017
14:21:31

Constantine
16.06.2017
14:21:42

Arseny
16.06.2017
14:21:44
Я вот тоже пока не понял
SCOPE_EXIT { return_code = SomeFunction(); };

Constantine
16.06.2017
14:23:30
одна функция всего

Владислав
16.06.2017
14:23:47
int some_func() {//...};
static int ret_code;
void foo ()
{
BOOST_SCOPE_EXIT_ALL(&ret_code)
{
ret_code = some_func();
};
//other job...
}

Igor
16.06.2017
14:24:08
тебе нужно чтобы код был равен результату SomePrivate, а если она кинет - то условно -1 ?

Constantine
16.06.2017
14:24:21
void SomeFunction() {
if (path1) { exit_code = 1; return; }
if (path2) { exit_code = 2; return; }
if (path3) { exit_code = 3; return; }
}
мне нужно, чтобы было вот так

Igor
16.06.2017
14:25:02
а