Size: a a a

2020 September 12

KI

Konstantin Ivlev in pro.cxx
Vyacheslav
Boost принимает правки через GitHub?
да
источник

V

Vyacheslav in pro.cxx
👍
источник

S

SSH in pro.cxx
Ребзя, всех с праздником!
Вопрос, как должен вести себя сервер, если клиент подключился но ничего не отправил?
источник

VK

Vladimir Kostylev in pro.cxx
Andrei K
vec2f( {1.0, 1.0} ) там есть круглые внешние скобки. Подходящий под это конструктор только один — конструктор копирования. Сначала вызывается конструктор от двух аргументов, создаётся временный объект, и затем вызывается конструктор копирования куда этот временный объект идёт.
хм, clang и gcc вызывают только конструктор от двух переменных: https://godbolt.org/z/h863jn, а MSVC — делает так как вы говорите: https://rextester.com/LZLDRJ27875
источник

AK

Andrei K in pro.cxx
Vladimir Kostylev
хм, clang и gcc вызывают только конструктор от двух переменных: https://godbolt.org/z/h863jn, а MSVC — делает так как вы говорите: https://rextester.com/LZLDRJ27875
Мне кажется, msvc в данном случае прав. Я попробую найти строчку стандарта в подтверждение.
источник

DV

Dmitrij V in pro.cxx
SSH
Ребзя, всех с праздником!
Вопрос, как должен вести себя сервер, если клиент подключился но ничего не отправил?
Я закрываю подобные соединения. Ставлю таймаут на 3 сек, когда он срабатывает и бит валидных запросов не выставлен - обрубаю.
источник

S

SSH in pro.cxx
Dmitrij V
Я закрываю подобные соединения. Ставлю таймаут на 3 сек, когда он срабатывает и бит валидных запросов не выставлен - обрубаю.
Ну это нормальная практика?
источник

DV

Dmitrij V in pro.cxx
SSH
Ну это нормальная практика?
мы сейчас говорим о каком-то конкретном протоколе, или собственном ?
источник

S

SSH in pro.cxx
Dmitrij V
мы сейчас говорим о каком-то конкретном протоколе, или собственном ?
Ну у меня ща ртсп
источник

DV

Dmitrij V in pro.cxx
SSH
Ну у меня ща ртсп
Ну в доках и посмотреть тогда, там подобные моменты должны освещаться.
источник

S

SSH in pro.cxx
Dmitrij V
Ну в доках и посмотреть тогда, там подобные моменты должны освещаться.
Пасиб, ща буду смотреть, но если кто по памяти помнит буду рад если ткнут носом
источник

VK

Vladimir Kostylev in pro.cxx
Andrei K
Мне кажется, msvc в данном случае прав. Я попробую найти строчку стандарта в подтверждение.
Если return f( vec2f( {0.f, 0.f} ) )  на return f( vec2f( vec2f{0.f, 0.f} ) ) заменить, то у msvc тоже только 1 вызов конструктора остаётся, copy/move не вызываются. Я сначала удивился, но на cppreference сказано, что в первом случае non-mandatory copy elision (т.к. the source object is a nameless temporary), а во втором — mandatory. Т.е. получается, что формально все компиляторы правы (хотя лучше бы msvc лишние операции убирала, конечно).
источник

VK

Vladimir Kostylev in pro.cxx
Хотя я ступил. Это до с++14 включительно так. Поставил с++latest, msvs стала на этом примере вылетать. Upd: точнее я там в стандартах запутался )) — вроде раньше они, когда появились, все были non-mandatory. Суть в том, что msvc её для T(T(f())) применяла, а для неименованных временных объектов — нет.
источник

VK

Vladimir Kostylev in pro.cxx
Ну да, ТС выше писал что с C++14 работает, с C++17 — нет. Т.е. баг в msvc появляется при переходе от non-mandatory copy elision к mandatory. С return f( vec2f( vec2f{0.f, 0.f} ) ) всё работает на всех стандартах.
источник

V

Vyacheslav in pro.cxx
Anatoly Shirokov
А так же Qt Creator, Visual Studio. только в чем же вопрос?
И у всех форматы разные? Или уже достигли соглашения?
источник

AS

Anatoly Shirokov in pro.cxx
Vyacheslav
И у всех форматы разные? Или уже достигли соглашения?
Какой принят в твоей компании
источник

V

Vyacheslav in pro.cxx
Anatoly Shirokov
Какой принят в твоей компании
Т.е. общепринятого форматирования пока не появилось? Ок. Спасибо за ответы
источник

ПК

Побитый Кирпич... in pro.cxx
Vyacheslav
Т.е. общепринятого форматирования пока не появилось? Ок. Спасибо за ответы
и не появится
источник

VK

Vladimir Kostylev in pro.cxx
Чеширский Кот
Microsoft Visual Studio Professional 2019 (2)
Version 16.7.2
Можно ещё немного упростить:
struct vec
{  int x;
  vec(): x{} {}
  vec(const vec&): x{} {}
};
void f( vec v ){}
int main()
{
 f( vec( {} ) );
}
// in MSVC this works w/o copy elision (C++14), bug with C++17,20;
// f( vec( vec{} ) ); // <-- this always works
// to reproduce the bug, vec constructor must take 0 or 2 arguments,
// i.e. "vec(int)" works, "vec()" and "vec(int,int)" fail
источник

S

SSH in pro.cxx
Vladimir Kostylev
Можно ещё немного упростить:
struct vec
{  int x;
  vec(): x{} {}
  vec(const vec&): x{} {}
};
void f( vec v ){}
int main()
{
 f( vec( {} ) );
}
// in MSVC this works w/o copy elision (C++14), bug with C++17,20;
// f( vec( vec{} ) ); // <-- this always works
// to reproduce the bug, vec constructor must take 0 or 2 arguments,
// i.e. "vec(int)" works, "vec()" and "vec(int,int)" fail
наркоманы😂
источник